将varchar值转换为数据类型位时转换失败

时间:2019-05-08 13:54:48

标签: c# sql-server asp.net-core-mvc

我正在尝试向数据库中添加新用户,但出现此错误:

  

System.Data.SqlClient.SqlException:'将varchar值'@actief'转换为数据类型位时,转换失败。'

我不明白为什么,因为我数据库中的Actief类型为Bit

我尝试进行以下更改,但没有解决任何问题

cmd.Parameters.Add("@actief", SqlDbType.Bit);

代码:

public void InsertUser(Gebruiker user)
{
    SqlConnection con = new SqlConnection();
    con.ConnectionString = CONNECTION_STRING;
    con.Open();

    SqlCommand cmd = new SqlCommand();

    // set Connection Property  of Command object
    cmd.Connection = con;
    cmd.CommandType = System.Data.CommandType.Text;

    cmd.CommandText = "INSERT INTO dbo.Gebruiker (Naam, Voornaam, Rol, Actief, Adres, Gemeente, Land, Functie) " +
                "VALUES ('@naam', '@voornaam', '@rol', '@actief', '@adres', '@gemeente', '@land', '@functie')";

    // assign values
    cmd.Parameters.AddWithValue("@naam", user.Naam);
    cmd.Parameters.AddWithValue("@voornaam", user.Voornaam);
    cmd.Parameters.AddWithValue("@rol", user.Rol);
    cmd.Parameters.AddWithValue("@actief", user.Actief);
    cmd.Parameters.AddWithValue("@adres", user.Adres);
    cmd.Parameters.AddWithValue("@gemeente", user.Gemeente);
    cmd.Parameters.AddWithValue("@land", user.Land);
    cmd.Parameters.AddWithValue("@functie", user.Functie);

    cmd.ExecuteNonQuery();
    con.Close();
}

1 个答案:

答案 0 :(得分:2)

您的插入命令完全错误-您需要在VALUES()部分的SQL变量中删除所有这些单引号。

尝试一下:

cmd.CommandText = "INSERT INTO dbo.Gebruiker (Naam, Voornaam, Rol, Actief, Adres, Gemeente, Land, Functie) " +
                  "VALUES (@naam, @voornaam, @rol, @actief, @adres, @gemeente, @land, @functie)";

使用单引号将您发送的字符串文字(而不是这些变量的!)发送到INSERT命令中-并非如此T-SQL 无法将 '@actief'转换为BIT值感到非常惊讶。