49

テーブル 「学生」があります

   P_ID   LastName  FirstName  Address  City

   1        Hansen    Ola                
   2        Svendson   Tove
   3        Petterson   Kari
   4        Nilsen       Johan
...and so on 

C# で編集コードを変更する方法

 string firstName = "Ola";
 string  lastName ="Hansen";
 string  address = "ABC";
 string city = "Salzburg";

 string connectionString = System.Configuration.ConfigurationManager
                          .ConnectionStrings["LocalDB"].ConnectionString;

 using (SqlConnection connection = new SqlConnection(connectionString))
     using (SqlCommand command = connection.CreateCommand())
 { 
   command.CommandText = "INSERT INTO Student (LastName, FirstName, Address, City) 
                          VALUES (@ln, @fn, @add, @cit)";

   command.Parameters.AddWithValue("@ln", lastName);
   command.Parameters.AddWithValue("@fn", firstName);
   command.Parameters.AddWithValue("@add", address);
   command.Parameters.AddWithValue("@cit", city);

   connection.Open();

   command.ExecuteNonQuery();

   connection.Close();
 } 

Lastnameフィールドに lastname の値があり、FirstNameフィールドに firstname の値があるエントリを編集します。

こんなの使いたくない

 UPDATE Persons  SET Address='Nissestien 67', City='Sandnes' 
 WHERE LastName='Tjessem'     AND FirstName='Jakob'

そして、私は元の声明を次のように編集しました

 command.CommandText = "UPDATE Student(LastName, FirstName, Address, City) 
   VALUES (@ln, @fn, @add, @cit) WHERE LastName='" + lastName + 
                           "' AND FirstName='" +  firstName+"'";

しかし、ステートメントが実行されていないのに、SQL 例外がスローされるのはなぜですか? それに対する解決策はありませんか?

4

10 に答える 10

79

これは、SQL でレコードを更新する正しい方法ではありません。

command.CommandText = "UPDATE Student(LastName, FirstName, Address, City) VALUES (@ln, @fn, @add, @cit) WHERE LastName='" + lastName + "' AND FirstName='" + firstName+"'";

次のように記述します。

command.CommandText = "UPDATE Student 
SET Address = @add, City = @cit Where FirstName = @fn and LastName = @add";

次に、挿入操作で追加したのと同じパラメーターを追加します。

于 2013-03-06T11:32:41.263 に答える
29

こんなの使いたくない

これはUpdateSQL のステートメントの構文です。その構文を使用する必要があります。そうしないと、例外が発生します。

command.Text = "UPDATE Student SET Address = @add, City = @cit Where FirstName = @fn AND LastName = @ln";

それに応じてパラメータを追加します。

command.Parameters.AddWithValue("@ln", lastName);
command.Parameters.AddWithValue("@fn", firstName);
command.Parameters.AddWithValue("@add", address);
command.Parameters.AddWithValue("@cit", city);  
于 2013-03-06T11:31:13.847 に答える
6
string constr = @"Data Source=(LocalDB)\v11.0;Initial Catalog=Bank;Integrated Security=True;Pooling=False";
SqlConnection con = new SqlConnection(constr);
DataSet ds = new DataSet();
con.Open();
SqlCommand cmd = new SqlCommand(" UPDATE Account  SET name = Aleesha, CID = 24 Where name =Areeba and CID =11 )";
cmd.ExecuteNonQuery();
于 2014-04-26T17:45:47.260 に答える
5

すべての言語には常に適切な構文があります。同様に、SQL(Structured Query Language) にも更新クエリ用の特定の構文があり、更新クエリを使用する場合はこれに従う必要があります。そうしないと、期待した結果が得られません。

于 2013-03-06T11:44:59.903 に答える
5

この連結形式は絶対に使用しないでください。

String st = "UPDATE supplier SET supplier_id = " + textBox1.Text + ", supplier_name = " + textBox2.Text
        + "WHERE supplier_id = " + textBox1.Text;

使用する:

command.Parameters.AddWithValue("@attribute", value);

常にオブジェクト指向で作業する

編集:これは、更新をパラメーター化すると、SQL インジェクションを防ぐのに役立つためです。

于 2016-09-12T23:02:47.650 に答える
5

SQL 構文を使用したくない場合 (強制されます)、SQL ステートメントを自分で記述しない Entity Framework や Linq-to-SQL などのフレームワークに切り替えます。

于 2013-03-06T11:33:02.837 に答える
-2
String st = "UPDATE supplier SET supplier_id = " + textBox1.Text + ", supplier_name = " + textBox2.Text
            + "WHERE supplier_id = " + textBox1.Text;

        SqlCommand sqlcom = new SqlCommand(st, myConnection);
        try
        {
            sqlcom.ExecuteNonQuery();
            MessageBox.Show("update successful");
        }
        catch (SqlException ex)
        {
            MessageBox.Show(ex.Message);
        }
于 2015-11-02T08:48:42.880 に答える