SQLCommand 参数抛出“InvalidCastException”

问题描述 投票:0回答:1

我有一个旧的 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”。我尝试过将所有内容写入带有大量引号的字符串生成器中。

任何建议或文档都会有帮助。预先感谢您。

c# sql sql-server ado.net sqlparameter
1个回答
0
投票

虽然代码产生错误,但它会按预期完成。

“InvalidCastException”错误不是一个破坏者,我相信虽然参数可能不匹配,但无论如何它都包含在内。

© www.soinside.com 2019 - 2024. All rights reserved.