7

テキストボックスの値を編集します..しかし、問題があることがわかりました

  protected void btn_edit_Click(object sender, EventArgs e)
    {
        DatabaseConnector con = new DatabaseConnector().CreateInstance();
        SqlCommand com = new SqlCommand("UPDATE tbl_BinCardManager SET ItemName = @ItemName WHERE ItemNo = @ItemNo");
        com.Parameters.Add("@ItemName",sqlDbType.VarChar);
        con.Open();
        cmd.ExecuteNonQuery();
        con.Close();

    }

エラー 1:

名前「sqlDbType」は現在のコンテキストに存在しません

エラー 2:

'ERPSystem.DatabaseConnector' には 'Open' の定義が含まれておらず、タイプ 'ERPSystem.DatabaseConnector' の最初の引数を受け入れる拡張メソッド 'Open' が見つかりませんでした (using ディレクティブまたはアセンブリ参照がありませんか?)

私の DBConnector クラスは次のとおりです。

 class DatabaseConnector
{
    private DatabaseConnector databaseConnector;
    private string connectionString = "Data Source=lernlap;Initial Catalog=ERPSystemDB;User ID=sa;Password=sa123";

    public DatabaseConnector()
    {

    }

    private SqlConnection connection;

    private bool Connect()
    {
        try
        {
            connection = new SqlConnection(connectionString);
            connection.Open();
            return true;
        }
        catch(Exception) {

            return false;

        }
    }

    internal DatabaseConnector CreateInstance()
    {
        if (databaseConnector == null)
        {
            databaseConnector = new DatabaseConnector();
            databaseConnector.Connect();
        }
        return databaseConnector;
    }
4

7 に答える 7

12

C# は大文字と小文字を区別します... IntelliSense を使用してみてください。

SqlDbType

最初のエラーを修正すると、他のエラーが消える場合があります。


余談ですが、適切なリソース処理を行わないと、接続/メモリ リークが発生することになります。個人的には、このusingステートメントを使用して落とし穴を回避しています。

「DatabaseConnector」が何であるかは完全にはわかりませんが、独自のクラスの可能性がありますが、代わりにSqlConnectionを使用するか、おそらくSqlDatabaseを使用する必要があります。

更新: DBConnector クラスがシングルトンまたはファクトリ、またはその両方であると想定されているかどうかはわかりません。そのため、使用を避けるために答えを単純化しました。探しているパターンを作成し、DBConnector クラスを提供する方法の詳細について、別の質問をしてください。それは可能だと思いますが、あなたが持っているものを修正するのに十分な情報がありません.

public static CONN_STR = "Data Source=lernlap;Initial Catalog=ERPSystemDB;User ID=sa;Password=sa123";

  protected void btn_edit_Click(object sender, EventArgs e) 
    { 
        using(SqlConnection con = new SqlConnection(CONN_STR))
        {
          con.Open(); 

          using(SqlCommand cmd = new SqlCommand("UPDATE tbl_BinCardManager SET ItemName = @ItemName WHERE ItemNo = @ItemNo"), con)
          {

            // TODO: fill in param values with real values
            cmd.Parameters.AddWithValue("@ItemName", "my item name");
            cmd.Parameters.AddWithValue("@ItemNo", 1);

            cmd.ExecuteNonQuery(); 
          }
        }
     }
于 2012-06-22T16:27:49.970 に答える
7

SqlDbType s は大文字にする必要があります!

于 2012-06-22T16:27:31.867 に答える
3
yes but theres no any case sensitivity problem know 

sの代わりに使用したため、実際には構文エラーがありますS。さらに、SqlCommand には呼び出されるメソッドも、メソッドOpen()もありません。Close()

SqlConnection にはメソッドが含まれており、SqlCommand のプロパティを のインスタンスに設定して、データベースへの接続を開いたり閉じたりするため、SqlConnection を使用する必要Open()Close()ありConnectionますSqlConnection

于 2012-06-22T16:50:46.313 に答える
2

さらにエラーがあります。

  • 使い方からすると、SqlConnection代わりにという意味だと思いますDatabaseConnector
  • という名前の SqlCommand を作成しますcomが、それを次のように参照します。cmd
  • SqlConnection を SqlCommand に割り当てる必要があります。そうしないと、開く接続がわかりません。
  • SqlCommand には 1 つのパラメーターのみを指定しますが、クエリには 2 つ (ItemNoおよびItemName) が必要です。

新しいソースに基づいて編集します。

  • 「DatabaseConnector」には「Open」の定義が含まれていません」というエラーは、 のcon.Connect()代わりに記述することで修正できますcon.Open()
  • ただし、「Close()」関数がないという他のエラーは修正できません。接続を閉じるように指示する方法はありません。

これはあなた自身のコードですか?

于 2012-06-22T16:33:20.617 に答える
1

The Code Projectで作成されたクラスを使用していますか?

エラーは接続文字列が原因だと思います。接続文字列はクラス OdbcDatabaseConnector に含まれている必要があります。まあ、私はこのコード プロジェクトのクラスを使用したことはありませんが、可能性はあります。

于 2012-06-22T16:48:04.547 に答える
1

大文字の 'S' で記述しているにもかかわらず、特に Visual Studio 2015 で同じエラーが発生する場合は、 'SqlDbType' を記述する代わりに、 System.Data.SqlDbType を記述します。

例えば:

  param[0] = new SqlParameter("@Name", System.Data.SqlDbType.VarChar,50);
于 2015-09-16T07:58:47.517 に答える