0

私はfolコードを持っています

 string user = "new user";
 DataSet myDS = new DataSet();
        string sql = string.Format("Select Counter,Occupants From Rooms where Room = '{0}'",room);
        SqlDataAdapter dAdapt = new SqlDataAdapter(sql, cnn);
        dAdapt.Fill(myDS, "Rooms");

        foreach (DataTable dt in myDS.Tables)
        {
            int var =(int) dt.Rows[0].ItemArray[0];
            var--;
            dt.Rows[0].ItemArray[0] = var;
            String occups = dt.Rows[0].ItemArray[1].ToString();
            occups += user;
            dt.Rows[0].ItemArray[1] = occups;
        }
        dAdapt.Update(myDS,"Rooms");  

Counter(small int 型) と Occupants(text 型) の 2 つの列を持つ単一の行を取得しています。データ型 text と var char は equal to 演算子で互換性がないというエラーが表示されますが、エラーdAdapt.Fill(myDS, "Rooms");は奇妙な行を指しています。ここで何が問題なのですか?そして、接続ステータスを出力して確認したので、db接続が開いていると確信しています。

4

2 に答える 2

1

の Update-Command を指定しない限り、これはとにかく機能しませんDataAdaper

レコードをメモリにロードして更新することはありません。その間、別のトランザクションから変更された可能性があります。とにかく非効率です。代わりに、単一の更新コマンドを使用します。

string updateSql = @"
    UPDATE ROOMS SET
        Counter = Counter + 1,
        Occupants = Occupants + ',' + @newUser
    WHERE
        Room = @Room";

using(var con = new SqlConnection(connectionString))
using (var updateCommand = new SqlCommand(updateSql, con))
{
    updateCommand.Parameters.AddWithValue("@newUser", user);
    updateCommand.Parameters.AddWithValue("@Room", room);
    con.Open();
    updateCommand.ExecuteNonQuery();
}
于 2013-01-03T13:40:09.453 に答える
0

Room = 'something'テキストが = と互換性がないため、構文 that を使用できるため、問題は選択にあります。

LIKE等号の代わりに使用し(=)ます。

固定クエリは次のようになります。

SELECT Counter,Occupants FROM Rooms WHERE Room LIKE '{0}'

ただし、安全ではないため、SqlParameters代わりにを使用することをお勧めします。string.Format

于 2013-01-03T13:36:46.353 に答える