我有一个旧的 C# 应用程序,在使用
SqlCommand
更新数据库时停止工作。我拉入一个用户对象并更新 MSSQL 数据库中的值。
我收到的错误如下
EventSink“command.EventSink”引发了“System.InvalidCastException”类型的异常 System.Data.SqlClient.SqlCommand.CommandEventSink {System.InvalidCastException}
这是 SqlConnection 代码。
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["Subcriptions"].ToString());
using (con)
{
con.Open();
StringBuilder builder1 = new StringBuilder();
builder1.Append("UPDATE dbo.Subscribers SET ");
builder1.Append("Name = @Name,");
builder1.Append("Email = @Email,");
builder1.Append("Company = @Company,");
builder1.Append("Active = @Active ");
builder1.Append("WHERE SiebelUserId = @UserId");
SqlCommand command = new SqlCommand(builder1.ToString(), con);
command.Parameters.Add("@UserId", SqlDbType.VarChar);
command.Parameters.Add("@Name", SqlDbType.VarChar);
command.Parameters.Add("@Email", SqlDbType.VarChar);
command.Parameters.Add("@Company", SqlDbType.VarChar);
command.Parameters.Add("@Active", SqlDbType.Bit);
command.Parameters["@UserId"].Value = user.Username;
command.Parameters["@Name"].Value = user.FirstName + " " + user.LastName;
command.Parameters["@Email"].Value = user.Email;
command.Parameters["@Company"].Value = user.CompanyName;
command.Parameters["@Active"].Value = user.IsActive;
try
{
int rowsAffected = command.ExecuteNonQuery();
if (rowsAffected == 0)
{
Program.WriteLog(rowsAffected + " SQL Record not updated.");
}
}
catch (Exception exception1)
{
sendAdminEmail("SQL update error: " + exception1.Message);
}
finally
{
con.Close();
}
我认为
InvalidCastException
是针对 SqlDbType.Bit
与布尔值 user.IsActive
有问题的。当我从查询中取出该参数时,我仍然更新了 0 条记录。我开始怀疑这段代码是否有效。
我尝试将布尔值
User.IsActive
转换为 int
。
int active;
if (user.IsActive == true)
{
active = 1;
} else
{
active = 0;
}
command.Parameters["@Active"].Value = active;
我尝试将
@Active
参数的转换更改为 <UInt32>
。我尝试将参数更改为 varchar 并将 bool 更改为字符串“true”。我尝试过将所有内容写入带有大量引号的字符串生成器中。
任何建议或文档都会有帮助。预先感谢您。
虽然代码产生错误,但它会按预期完成。
“InvalidCastException”错误不是一个破坏者,我相信虽然参数可能不匹配,但无论如何它都包含在内。