C#更新错误

时间:2015-12-19 18:32:50

标签: c# sql-server database crud

我收到错误找不到具有参数的非泛型方法'UpdateRow':id,values,tableName,(然后它命名所有行,例如:ISBN等)

所以看起来我的var查询在更新时没有将所有的vaule放在值字符串中,并且表名没有设置为表,并且ID没有设置为id列,所以我我不确定我能做些什么来改变这一点。

public bool UpdateRow(Dictionary<string, string> id, Dictionary<string, string> values, string table)
{
    Boolean returnCode = true;

    using (SqlConnection conn = new SqlConnection(ConnectionString))
    {
        conn.Open();

        var query = String.Format("UPDATE {0} SET ({1}) WHERE {1}='{2}", table, id, values);

        using (SqlCommand command = new SqlCommand(query))
        {
            command.ExecuteNonQuery();
        }
    }

    return returnCode;
}

如果需要,将提供更多信息。谢谢

:更多信息

感谢您的帮助,我目前正在尝试更新我使用之前的getAll函数选择的3个表中的任何行,将要编辑的行的唯一标识符作为一个值的数组加上列的名称表示主键,包含由列名索引的值的数组以及表示表名的字符串。

2 个答案:

答案 0 :(得分:2)

您的问题在于构建SQL更新语句,您的SQL不正确,并且您尝试更新多个列但是传入字典(它不会为您完成工作)。

var query = String.Format("UPDATE {0} SET ({1}) WHERE {1}='{2}", table, id, values);

我建议先让你的SQL语句运行。有点像...

UPDATE TableName
SET col1 = 5, col2 = 3 
WHERE ID = 7

完成后,请专注于在c#...

中构建查询
var query = new StringBuilder();
query.AppendFormat("UPDATE {0}\r\n", table);
query.Append("SET \r\n");
// for each col in dictionary {
  query.AppendFormat(" {0} = '{1}',\r\n", col.Key, col.Value);
// }
query.AppendFormat("WHERE Id = '{0}'\r\n", id);

以上只是为了给你一个想法。它不能复制和粘贴(你必须做一些工作)。

我的假设是你只想更新一行(所以id是字符串而不是字典)?但是你可以把它改成多行,如果这就是你想要的那样。

答案 1 :(得分:0)

您的字符串使用字典作为值而不是它们包含的字符串。如果您确实要传递整个字典,则必须搜索您要查找的字符串。

获取价值

string idString;
bool isValidArgument = id.TryGetValue("KeyOfString", out idString);

if (isValidArgument)
{
    // Code here
}
else
    throw new ArgumentException("Invalid ID key.");

我建议只在你的方法中传递字符串。