-1

クエリが null を返し、必要なものを更新しない理由を尋ねたいと思います。申し訳ありませんが、私はまだ新しいasp.netですc#

myquery = "UPDATE kenderaan SET buatan = " + "'" + carmake + "'" + "," +
          "model = " + "'" + carmodel + "'" + "," +
          "no_enjin = " + "'" + carenjin + "'" + "," +
          "cc = " + carcc + "," +
          "seatCapacity = " + carseat + "," +
          "tahunBuatan = " + caryear + " WHERE no_kenderaan = " + "'" + carid + "'" + "," +
          "AND ic = " + "'" + cusid + "'";


connection = new DbConnection();
connection.Update(myquery);
4

3 に答える 3

3

コードをこれに再構築し、Connectionオブジェクト、Commandオブジェクト、usingステートメントを使用します。

string myquery = "UPDATE kenderaan SET buatan = @carmake ," +
              "     model = @carmodel ," +
              "     no_enjin =  @carenjin ," +
              "     cc = @carcc ," +
              "     seatCapacity =  @carseat ," +
              "     tahunBuatan = @caryear " +
              "WHERE no_kenderaan = @carid " +
              "     AND ic = @cusid ";

using (MySqlConnection _conn = new MySqlConnection("connectionStringHere"))
{
    using (MySqlCommand _comm = new  MySqlCommand())
    {
        _comm.Connection = _conn;
        _comm.CommandText = myquery;
        _comm.CommandType = CommandType.Text;
        _comm.Parameters.AddWithValue("@carmake",carmake);
        _comm.Parameters.AddWithValue("@carmodel",carmodel);
        _comm.Parameters.AddWithValue("@carenjin",carenjin);
        _comm.Parameters.AddWithValue("@carcc",carcc);
        _comm.Parameters.AddWithValue("@carseat",carseat);
        _comm.Parameters.AddWithValue("@caryear",caryear);
        _comm.Parameters.AddWithValue("@carid",carid);
        _comm.Parameters.AddWithValue("@cusid",cusid);

        try
        {
            _conn.Open();
            _comm.ExecuteNonQuery();
            MessageBox.Show("Updated!");
        }
        catch (MySqlException e)
        {
            MessageBox.Show(e.ToString()); // as mentioned on the comment
        }

    }
}

クエリをパラメーター化する必要がある理由:

  • SQL インジェクションを回避
  • コードをより読みやすくします
  • など.. :D

ソース

于 2012-11-06T04:04:05.093 に答える
1

メソッドを使用してステートメントDbCommandを実行する を作成します。使用している場合は、次のコード スニペットを使用できます。UpdateExecuteNonQuery()SQL Server

using System.Data.SqlClient;

string query = "UPDATE kenderaan SET buatan = @carmake" +
          ", model = @carmodel" +
          ", no_enjin =  @carenjin" +
          ", cc = @carcc" +
          ", seatCapacity = @carseat" +
          ", tahunBuatan = @caryear" +
          " WHERE no_kenderaan = @carid AND ic = @cusid";

using (SqlConnection conn = new SqlConnection("<connection string>"))
{
    using (SqlCommand cmd = new SqlCommand(query, conn))
    {
        cmd.Parameters.AddWithValue("@carmake", carmake);
        cmd.Parameters.AddWithValue("@carmodel", carmodel);
        cmd.Parameters.AddWithValue("@carenjin", carenjin);
        cmd.Parameters.AddWithValue("@carcc", carcc);
        cmd.Parameters.AddWithValue("@carseat", carseat);
        cmd.Parameters.AddWithValue("@caryear", caryear);
        cmd.Parameters.AddWithValue("@carid", carid);
        cmd.Parameters.AddWithValue("@cusid", cusid);

        conn.Open();
        cmd.ExecuteNonQuery();            
    }
}
于 2012-11-06T03:55:40.000 に答える
-1

コードの代わりに次のコードを試してください。

varchar パラメータが文字列値と比較されていることを確認してください。

 string myquery = "UPDATE kenderaan SET buatan = '" + carmake + "',model = '"+ 
 carmodel + "',no_enjin = '" +carenjin + "',cc = " + carcc + ",seatCapacity = " + 
 carseat + ",tahunBuatan = " + caryear +
 " WHERE no_kenderaan = '" + carid +  "' AND ic = '" + cusid + "'";


        connection = new DbConnection();
        connection.Update(myquery);

更新:申し訳ありませんが、クエリを where 条件で修正したところ、2 つの条件を区切るために使用していたコンマを削除しました。

SQL インジェクション攻撃を回避するには、次のいずれかを使用します。

1)Parameters with Stored Procedures

2)Use Parameters with Dynamic SQL

3)Constrain Input

詳細については、こちらをご覧ください

于 2012-11-06T04:16:58.287 に答える