【问题标题】:ASP.net: insert statement and gridviewASP.net:插入语句和网格视图
【发布时间】:2014-05-30 18:29:26
【问题描述】:

我有一个错误,我无法理解我在做什么。在解决问题之前,让我告诉你:我有四个表,分别是

Tbl1
+----+----------+-----------+----------+
| ID | NAME     | ADDRESS   | SALARY   |
+----+----------+-----------+----------+
| C1 | Ramesh   | Ahmedabad |  2000.00 |
| C2 | Khilan   | Delhi     |  1500.00 |
| C3 | kaushik  | Kota      |  2000.00 |
| C4 | Chaitali | Mumbai    |  6500.00 |
| C5 | Hardik   | Bhopal    |  8500.00 |
| C6 | Komal    | MP        |  4500.00 |
| C7 | Muffy    | Indore    | 10000.00 |
+----+----------+-----------+----------+

Tbl2
+----+----------+-----------+
| ID | NAME     | ADDRESS   |   
+----+----------+-----------+
| S1 | Roy      | Kolkota   |
| S2 | Praveen  | Delhi     |
| S3 | Madhuri  | Kota      |
| S4 | Hema     | Mumbai    |
| S5 | Anu      | Mumbai    |
| S6 | Khushi   | MP        |
| S7 | Anjali   | Indore    |
+----+----------+-----------+

Tbl3
+----+----------+-----------+
| ID | NAME     | ADDRESS   |   
+----+----------+-----------+
| P1 | Mouse    | Delhi     |
| P2 | Camera   | Delhi     |
| P3 | Pen Drive| Ahmedabad |
| P4 | RAM’s    | Mumbai    |
| P5 | Keyboard | Mumbai    |
| P6 | HDMI’s   | MP        |
| P7 | Hard Disk| Indore    |
+----+----------+-----------+   

Tbl4
+----+-------+-----------+-----------+
| ID | ID    | ID        | Total Cost|
+----+-------+-----------+-----------+
| C1 | S1    | P1        |    2000   |
| C1 | S1    | P3        |    1500   |
| C2 | S2    | P4        |    1200   |
| C2 | S3    | P2        |    1800   |
| C4 | S5    | P1        |    1000   |
| C5 | S6    | P5        |    900    |
| C6 | S7    | P6        |    190    |
| C7 | S6    | P4        |    1900   |
+----+-------+-----------+-----------+

问题 1:我试图在 tbl2 中插入一个新行,但我遇到了一个错误,它说列名不存在。

例如,我添加了 S8 Rakesh Banglore(这是在三个不同的文本框下)。它说列名 S8、列名 Rakesh、列名 Banglore 不存在。下面是我的代码。另外我应该添加什么来为重复数据提供消息?另外,如果我添加 S11 或它在 S1 下的东西,那么我应该怎么做才能安排桌子?

web.config

<?xml version="1.0"?>

<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->

<configuration>
<appSettings>

    <add key="SQLConn" value="Data Source=online database source;Initial Catalog=database name;Persist Security Info=True;User ID=username;Password=password" />
</appSettings>
    </configuration>

后面的代码

 protected void Button1_Click1(object sender, EventArgs e)
    {
        SqlConnection SqlConn = new SqlConnection();
        SqlCommand cmd;
        SqlConn.ConnectionString = ConfigurationManager.AppSettings["SqlConn"].ToString();
        SqlConn.Open();
        string query1 = "insert into tbl2(id,name,address) values (" + txt_id.Text + ",'" + txt_name.Text + "','" + txt_address.Text + "')";

        cmd = new SqlCommand(query1, SqlConn);
        cmd.ExecuteNonQuery();
        SqlConn.Close();
    }

我遇到了上面列出的错误,行“SqlConn.Open();”。

问题 2:

如果我有一个包含两个文本框名称 txt_CID.txt 和 txt_SID.txt 的 Web 表单。它在网格视图中显示 tbl3 行。我很困惑如何用后面的代码打印它。另外我想了解如何在没有代码的情况下打印它。

例如:

所以,如果我输入 C1 S1 结果应该是

| P1 | Mouse    | Delhi     |
| P3 | Pen Drive| Ahmedabad |

这应该在网格视图中显示结果。

【问题讨论】:

  • 我已删除“AddWithValue”并更新了您在我的程序中建议的内容 现在错误是 - System.Data.dll 中发生了“System.Data.SqlClient.SqlException”类型的异常但未处理在用户代码中附加信息:无效的列名“S8”。

标签: c# asp.net gridview code-behind sql-insert


【解决方案1】:

问题一:

将您的查询更改为类似的内容

protected void Button1_Click1(object sender, EventArgs e)
{
    SqlConnection SqlConn = new SqlConnection();
    SqlCommand cmd;
    SqlConn.ConnectionString = ConfigurationManager.AppSettings["SqlConn"].ToString();
    SqlConn.Open();
    string query1 = "insert into tbl2(id,name,address) values (@id,@name,@address)";
    cmd = new SqlCommand(query1, SqlConn);
    cmd.Parameters.AddWithValue("@id", txt_id.Text);
    cmd.Parameters.AddWithValue("@name", txt_name.Text);
    cmd.Parameters.AddWithValue("@address", txt_address.Text);
    cmd.ExecuteNonQuery();
    SqlConn.Close();
}

【讨论】:

  • 我知道,但要从所有文本框中获取值,它应该是 'string query1 = "insert into tbl2(id,name,address) values (" + txt_id.Text + ", '" + txt_name.Text + "'," + txt_address.Text + ")";'
  • 不,恐怕你错了。您已经将“txt_id”的值分配给“@id”,将“txt_name”的值分配给“@name”等等..
  • System.Data.dll 中发生“System.Data.SqlClient.SqlException”类型的异常,但未在用户代码中处理附加信息:必须声明标量变量“@id”。跨度>
  • 请参阅上面的代码以获得更多说明。添加了完整的代码。
  • 现在它解决了问题 1。现在我专注于问题 2。
【解决方案2】:

问题一:

不太确定,但我认为您在向查询中添加 txtAddress 和 txt_id 时缺少单引号。

您的查询

string query1 = "insert into tbl2(id,name,address) values (" + txt_id.Text + ",'" + txt_name.Text + "'," + txt_address.Text + ")";

应该改为

string query1 = "insert into tbl2(id,name,address) values ('" + txt_id.Text + "','" + txt_name.Text + "','" + txt_address.Text + "')";

同时删除cmd.Parameters.AddWithValue 行。

问题 2:

我认为您只需要加入 Tbl3 和 Tbl4,因此查询将类似于以下内容。

我还假设 Tbl4 中的 3 个 id 是 ID_1、ID_2 和 ID_3。

我没有测试过,所以可能有一些语法错误。

"SELECT T3.ID, T3.NAME, T3.ADDRESS
FROM TBL3 T3
INNER JOIN TBL4 T4
ON T3.ID = T4.ID_3
WHERE T4.ID_1 = '" +  txt_CID.txt + "' AND T4.ID_2 = '" + txtSID.txt + "'";

向 gridview 显示数据的代码

数据集 objDataSet = new DataSet(); SqlConnection objConn = new SqlConnection(); string query = "";//你的查询在这里 SqlCommand objComm = new SqlCommand(query, objConn); SqlDataAdapter objDataAdapter = new SqlDataAdapter(objComm); if (objConn.State == ConnectionState.Closed) { objConn.Open(); } objDataAdapter.Fill(objDataSet, "YourTableName"); dataGridView1.DataSource = objDataSet;

希望对你有帮助

【讨论】:

  • 谢谢你,我会尽力让你知道的。
  • 做我的问题 2,但我对此有疑问,如何将其连接到网格视图以显示结果?
  • 检查我关于在 gridview 中显示结果的更新答案。至于您的错误,我认为您在查询中缺少单引号,您在查询中附加了 txt_id.txt 。您需要在附加 txt_id 和 txtaddress 的地方加上单引号。请注意我的回答中的粗体字。
  • 字符串查询 ="SELECT T3.ID, T3.NAME, T3.ADDRESS FROM TBL3 T3 INNER JOIN TBL4 T4 ON T3.ID = T4.ID_3 WHERE T4.ID_1 = '" + txt_CID.txt + "' AND T4.ID_2 = '" + txtSID.txt + "'";对吗?
  • 是的,这应该是获取gridview记录的查询。
【解决方案3】:

问题 1 解决方案:

你已经打开了 SqlConn.Open();两次出错,

删除其中一个语句。

并删除代码中的以下行

    cmd.Parameters.AddWithValue("@id", txt_id.Text);
    cmd.Parameters.AddWithValue("@name", txt_name.Text);
    cmd.Parameters.AddWithValue("@address", txt_address.Text);

最后,

你错过了地址(txtaddress.Text)代码解决的单引号,

        SqlConnection SqlConn = new SqlConnection();
        SqlCommand cmd;
        SqlConn.ConnectionString = ConfigurationManager.AppSettings["SqlConn"].ToString();
        SqlConn.Open();
        string query1 = "insert into tbl2(id,name,address) values (" + txt_id.Text + ",'" + txt_name.Text + "','" + txt_address.Text + "')";
        cmd = new SqlCommand(query1, SqlConn);
        cmd.ExecuteNonQuery();
        SqlConn.Close();

【讨论】:

  • 在得到您的建议后,我确​​实删除了我的“SqlConn.Open();”但它仍然给了我这个错误。我还更新了与“SqlConn.Open();”相关的帖子
  • 当然我会在几分钟内上传它
猜你喜欢
  • 2013-03-08
  • 1970-01-01
  • 1970-01-01
  • 2017-12-05
  • 1970-01-01
  • 2020-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多