【问题标题】:Updating through SqlDataAdapter and DataSet in C#在 C# 中通过 SqlDataAdapter 和 DataSet 进行更新
【发布时间】:2012-12-17 20:39:21
【问题描述】:

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

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

【问题讨论】:

  • 除非您为DataAdaper 指定了Update-Command,否则这无论如何都行不通。
  • @TimSchmelter 你能告诉我怎么做吗?
  • Room 的类型是什么,它似乎也有文本类型,这就是为什么选择在 .Fill 上消失的原因

标签: c# sql-server dataset dataadapter


【解决方案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();
}

【讨论】:

  • 我已经按照您的代码进行了操作,但我收到一条错误消息,提示“添加运算符中的文本和 varchar 不兼容”,我猜该错误是指更新命令。
  • 养成使用 varchar(max) 和 nvarchar(max) 代替 text 和 ntext 的习惯,不仅更易于使用,而且 text 和 ntext 已被弃用。您需要使用UPDATETEXTTEXTPTR 函数。
【解决方案2】:

问题在于您的选择,因为您可以使用 Room = 'something' 的语法,因为文本与 = 不兼容。

使用LIKE 代替等号(=)

固定查询应如下所示:

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

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

【讨论】:

  • 谢谢!但是数据库中的更改仍然没有更新。我还应该做什么? dAdapt.update() 还不够??
  • 在第二个问题中,Tim Schmelter 的回答可以帮助你很多,即使他使用了 Sqlparameters 的正确方法。我想你也应该看看那个答案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-26
  • 2018-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-08
  • 2020-06-13
相关资源
最近更新 更多