将DropDownList值插入表

时间:2014-05-07 16:36:08

标签: c# asp.net sql parameters

我有一个包含两个int列的数据库表:GameID和GenreID,其中GameID是标识列。我想使用ASP.NET和C#将DropDownList中的SelectedValue作为GenreID插入到表中。 DropDownList中的所有ListItem看起来都像这样:

<asp:ListItem Text="Action" Value="1"></asp:ListItem>

所以,这就是我要做的事情。

将DropDownList值转换为int:

int GenreID = Int32.Parse(DropDownGenre.SelectedValue);

SQL命令:

SqlCommand cmd2 = new SqlCommand("INSERT into Games_Genres values(@GenreID)");

将该值添加到参数:

cmd2.Parameters.AddWithValue("@GenreID", SqlDbType.Int).Value = GenreID;

这给了我以下错误:

  

字符串或二进制数据将被截断。声明一直如此   终止。

我理解这个错误通常(总是?)意味着该字段不足以容纳我试图插入的数据。但是,看到我将值转换为int我不明白为什么这是一个问题?

4 个答案:

答案 0 :(得分:1)

你能试试吗

cmd2.Parameters.Add("@GenreID", SqlDbType.Int); cmd2.Parameters["@GenreID"].Value = GenreID;

相反?

答案 1 :(得分:1)

你能试试吗

SqlCommand cmd2 = 
      new SqlCommand("INSERT into Games_Genres (GenreID) values(@GenreID)");

答案 2 :(得分:1)

GenreID是否也设置为标识列?

此外,在为查询创建参数时,您不需要指定类型,因为T-SQL implicitly converts类型。它应该看起来像:

using (SqlCommand cmd2 = new SqlCommand("INSERT into Games_Genres (GenreID) values (@GenreID)"))
{
    cmd2.Parameters.AddWithValue("@GenreID", GenreID);
    cmd2.ExecuteScalar();
}

答案 3 :(得分:1)

我还无法添加评论,因此,您的架构图片显示GameId是一个关键字段而您没有设置它,如果您使用参数也可以创建存储过程而不是文本查询,如果仅用于测试目的,为什么不尝试:

var sqlCommand = new SqlCommand(String.Format("INSERT into Games_Genres values({0})", genreId));