sql server -通过c#中的SqlDataAdapter和DataSet进行更新
本文关键字:DataSet 更新 SqlDataAdapter server -通过 中的 sql | 更新日期: 2023-09-27 17:50:44
我有以下代码
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");
我正在检索一行两列——计数器(小int类型)和占用者(文本类型)。我得到一个错误,说数据类型文本和var char在等于操作符中不兼容,但错误指向行dAdapt.Fill(myDS, "Rooms");
,这很奇怪。这是怎么了?我很确定db连接是打开的,因为我已经通过打印连接状态检查了它。
除非您为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();
}
问题是在你的选择,因为你可以使用语法,那Room = 'something'
,因为文本不兼容=.
用LIKE
代替等号(=)
固定查询应该像:
SELECT Counter,Occupants FROM Rooms WHERE Room LIKE '{0}'
但是我建议使用SqlParameters
而不是string.Format
,因为它不安全