我有一个具有uniqueidentifier类型的pk列的表。
我正试图从C编写一个更新语句,在C中,标识符是一个字符串。
下面是我正在尝试的代码:
string sql_start = "update SecurityUserGroup set ";
int paramPos = 0;
var paramList = new List<SqlParameter>();
if (roleName != null)
{
sql_start += " RoleName = '{" + paramPos + "}'";
paramList.Add(new SqlParameter(""+paramPos, roleName));
paramPos++;
}
if (activeDirectoryGroup != null)
{
sql_start += " ActiveDirectoryGroup = '{" + paramPos + "}'";
paramList.Add(new SqlParameter(""+paramPos, activeDirectoryGroup));
paramPos++;
}
//sql_start += " where SecurityUserGroupId = cast('{" + paramPos + "}' as uniqueidentifier)";
//sql_start += " where SecurityUserGroupId = convert(uniqueidentifier, '{" + paramPos + "}')";
sql_start += @" where SecurityUserGroupId = '{" + paramPos + @"}'";
paramList.Add(new SqlParameter(""+paramPos, new Guid(id)));
//paramList.Add(new SqlParameter(""+paramPos, id));
SqlHelper.ExecSql(sql_start, paramList);
sqlhelper.execsql函数执行以下操作:
public static void ExecSql(string sql, List<SqlParameter> parms)
{
using (SqlConnection con = GetConnection())
{
SqlCommand command = new SqlCommand(sql, con) {CommandType = CommandType.Text};
foreach (SqlParameter parm in parms)
{
command.Parameters.Add(parm);
}
command.ExecuteNonQuery();
}
}
但我要么得到无效语法,要么“从字符串转换为唯一标识符时转换失败”
我以前在提取过程中遇到过这个问题,最后将转换放入存储过程,看起来我也需要将其放入存储过程中。
提前感谢您对此有任何想法/建议。
编辑:一个示例ID看起来像“45D9EC51-1E52-49D8-9139-51F18FE13563”,它看起来像我通过管理工作室在表上看到的。
edit2:下面是最终工作的代码(使用@而不是):
var sql_start = new StringBuilder("update SecurityUserGroup set ");
int paramPos = 0;
var paramList = new List<SqlParameter>();
if (roleName != null)
{
sql_start.Append(" RoleName = @" + paramPos);
paramList.Add(new SqlParameter("@"+paramPos, roleName));
paramPos++;
}
if (activeDirectoryGroup != null)
{
if (paramPos > 0) sql_start.Append(",");
sql_start.Append(" ActiveDirectoryGroup = @" + paramPos);
paramList.Add(new SqlParameter("@"+paramPos, activeDirectoryGroup));
paramPos++;
}
sql_start.Append(" where SecurityUserGroupId = @id");
paramList.Add(new SqlParameter("@id", id));
SqlHelper.ExecSql(sql_start.ToString(), paramList);
当做,
克里斯