【问题标题】:Insert ID into SQL from C# Combo box从 C# 组合框中将 ID 插入 SQL
【发布时间】:2014-06-18 19:50:35
【问题描述】:

我正在编写的 C# 程序中有一个下拉(组合)框。 - 它从我的数据库中的表中提取数据:

 Application_Id | Application
 ---------------|--------------
       1        |Name1
       2        |Name2
       3        |Name3

下拉框的代码如下所示:

SqlConnection conn = new SqlConnection(SqlCon.DBCON);
conn.Open();
SqlCommand sc = new SqlCommand("select * from Application", conn);
SqlDataReader reader;

reader = sc.ExecuteReader();
DataTable dt = new DataTable();
dt.Columns.Add("ApplicationId", typeof(int));
dt.Columns.Add("Application_Name", typeof(string));
dt.Load(reader);

App.ValueMember = "ApplicationId";
App.DisplayMember = "Application_Name";
App.DataSource = dt;

conn.Close();

基本上,用户选择应用程序的名称并按下“插入”按钮。 我希望它随后将该应用程序的相关 ID 发布到我数据库中的另一个表中。 (帐户表)。 - 我确实将此设置作为主外键关系,但为了测试我删除了该关系。

我插入数据库的代码是这样的:

SqlConnection conn = new SqlConnection(SqlCon.DBCON);
conn.Open();
using (SqlCommand AQuery = conn.CreateCommand())
{
   AQuery.CommandText = "INSERT INTO Accounts(AccountName,Application_Id,num_Users) VALUES(@param1,@param2,@param3)";

   AQuery.Parameters.Add(new SqlParameter("@param1", account.Text));
   AQuery.Parameters.Add(new SqlParameter("@param2", App.ValueMember));
   AQuery.Parameters.Add(new SqlParameter("@param3", users.Text));

   AQuery.ExecuteNonQuery();
}

我的问题是,当我按下插入时出现异常。 (一切都编译)

异常状态:

将 nvarchar 值“ApplicationId”转换为数据类型 int 时出错。

-我试过了: 投掷 转换

在插入语句之前在应用程序中将valuemember转换为int,仍然是同样的错误。

我做错了什么? - 它不是试图将实际的字符串 'ValueMember' 转换为 int 是吗??

【问题讨论】:

  • SQL Server 中的 ApplicationId 是什么数据类型?

标签: c# sql sql-server sql-insert


【解决方案1】:

我认为您需要 SelectedValue 从组合框中检索选定的值,所以:

App.SelectedValue

SelectedValue 属性:获取或设置由 ValueMember 属性指定的成员属性的值。

您可以在检索值时设置断点以检查返回的内容以确保它是一个数字。

【讨论】:

  • 美丽。快速回答有效。 -我的错,但谢谢!
【解决方案2】:

参数应该初始化为

AQuery.Parameters.Add(new SqlParameter("@param2", Convert.ToInt32(App.SelectedValue)));

您的代码使用作为列名称(字符串)的ValueMember 属性而不是值。但是应该添加一些错误检查以确保在组合框中选择了某些内容

if(app.SelectedValue == null)
{
     MessageBox.Show("Select an app");
     return;
}

附带说明,在读取组合框的值时,我建议只使用填充组合框所需的字段,而不是加载所有字段,然后手动构建只有两列的数据表

using(SqlConnection conn = new SqlConnection(SqlCon.DBCON))
using(SqlCommand sc = new SqlCommand(@"select ApplicationId, Application_Name 
                                       from Application", conn))
{
     conn.Open();
     using(SqlDataReader reader = sc.ExecuteReader())
     {
          DataTable dt = new DataTable();
          dt.Load(reader);
          .....

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-27
    • 1970-01-01
    相关资源
    最近更新 更多