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");  

我正在检索包含两列的单行——计数器(小整数类型)和占用者(文本类型)。我收到一条错误消息,指出数据类型 text 和 var char 在 equal to 运算符中不兼容但错误指向dAdapt.Fill(myDS, "Rooms");奇怪的行。这里有什么问题?而且我很确定数据库连接已打开,因为我通过打印连接状态进行了检查。

4

2 回答 2

1

除非您为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

问题出在您的选择中,因为您可以使用语法 that Room = 'something',因为 text 与 = 不兼容。

使用LIKE而不是等号(=)

固定查询应如下所示:

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

但我建议使用SqlParameters而不是string.Format,因为它不安全。

于 2013-01-03T13:36:46.353 回答