[英]asp.net 'The multi-part identifier “abc@gmail.com” could not be bound.'
[英]The multi-part identifier “TextBox1.Text” could not be bound in C# ASP.NET?
我正在做一個訓練實習項目; 為了降低基礎知識,我的處理程序目前明確禁止參數化和面向安全的編碼。 就是說,我的主頁上有一個gridview,其中包含一個超鏈接字段,該鏈接將用戶帶到一個頁面,用戶可以在其中編輯文本框中的行數據。 該行由“ ProductId”列顯示,因為該行是自動遞增的並且是唯一的。 值顯示完美,所以我知道查詢字符串很好,但是當我嘗試使用button事件進行更新時,出現一條錯誤消息,內容為
無法綁定多部分標識符“ TextBox1.Text”。
對於我所有的文本框。 我的代碼如下。 我想念什么? 這是我的第一個牛仔競技表演,因此對於有經驗的眼睛來說,它很可能是基本的且顯而易見的。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Data;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class ViewEdit : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string x = Request.QueryString["ProductId"];
string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
string editQuery = "SELECT CustId, CustName, SicNaic, CustCity, CustAdd, CustState, CustZip, BroName, BroId, BroAdd, BroCity, BroState, BroZip, EntityType, Coverage, CurrentCoverage, PrimEx, Retention, EffectiveDate, Commission, Premium, Comments FROM ProductInstance WHERE ProductId =" + x;
using (SqlConnection editConn = new SqlConnection(connectionString))
{
editConn.Open();
using (SqlCommand command = new SqlCommand(editQuery, editConn))
{
SqlDataReader dr = command.ExecuteReader();
dr.Read();
TextBox1.Text = dr.GetInt32(0).ToString();
TextBox2.Text = dr.GetString(1);
TextBox3.Text = dr.GetString(2);
TextBox4.Text = dr.GetString(3);
TextBox5.Text = dr.GetString(4);
TextBox6.Text = dr.GetString(5);
TextBox7.Text = dr.GetInt32(6).ToString();
TextBox8.Text = dr.GetString(7);
TextBox9.Text = dr.GetInt32(8).ToString();
TextBox10.Text = dr.GetString(9);
TextBox11.Text = dr.GetString(10);
TextBox12.Text = dr.GetString(11);
TextBox13.Text = dr.GetInt32(12).ToString();
TextBox14.Text = dr.GetString(13);
TextBox15.Text = dr.GetInt32(14).ToString();
TextBox16.Text = dr.GetInt32(15).ToString();
TextBox17.Text = dr.GetInt32(16).ToString();
TextBox18.Text = dr.GetInt32(17).ToString();
TextBox19.Text = dr.GetDateTime(18).ToString();
TextBox20.Text = dr.GetInt32(19).ToString();
TextBox21.Text = dr.GetInt32(20).ToString();
TextBox22.Text = dr.GetString(21);
}
}
}
protected void Button1_Click(object sender, EventArgs e)
{
string x = Request.QueryString["ProductId"];
string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
string updateQuery = "UPDATE ProductInstance SET CustId = TextBox1.Text, CustName = TextBox2.Text, SicNaic =TextBox3.Text, CustCity = TextBox4.Text, CustAdd = TextBox5.Text, CustState = TextBox6.Text, CustZip = TextBox7.Text, BroName = TextBox8.Text, BroId = TextBox9.Text, BroAdd = TextBox10.Text, BroCity = TextBox11.Text, BroState = TextBox12.Text, BroZip = TextBox13.Text, EntityType = TextBox14.Text, Coverage = TextBox15.Text, CurrentCoverage = TextBox16.Text, PrimEx = TextBox17.Text, Retention = TextBox18.Text, EffectiveDate = TextBox19.Text, Commission = TextBox20.Text, Premium = TextBox21.Text, Comments = TextBox22.Text WHERE ProductId =" + x;
using (SqlConnection updateConn = new SqlConnection(connectionString))
{
updateConn.Open();
{
using (SqlCommand command = new SqlCommand(updateQuery, updateConn))
{
command.ExecuteNonQuery();
}
}
}
}
}
使用參數來執行此操作。 否則,您可以進行SQL注入。
SQLCommand cmd = new SQLCommand();
cmd.CommandText = "UPDATE ProductInstance SET CustId = @CustID WHERE .... ";
cmd.Parameters.AddWithValue("@CustID", TextBox1.Text);
cmd.ExecuteNonQuery();
您必須將TextBox
控件的Text
屬性的值作為字符串傳遞給查詢,而不是“ TextBox.Text”:
string updateQuery = "UPDATE ProductInstance SET CustId = " + TextBox1.Text + ", CustName = '" + TextBox2.Text + "', .... " + x;
注意 :
如果“ Text”屬性的值是一個字符串,則必須像上面的示例一樣在該值的兩側放置一個'
。
您的查詢將按原樣執行, Textbox*.Text
不會替換Textbox*.Text
。 您將必須使用SQL參數或使用字符串生成器或string.Format來生成查詢字符串。
const string queryFormat = "UPDATE ProductInstance SET CustId = {0}, CustName = '{1}', ... WHERE ProductId = {n}";
var query = string.Format(queryFormat, Textbox1.Text,
Textbox2.Text,
...,
TextboxN.Text, x);
確保您生成有效的SQL Update查詢。 如果Textbox4.Text是字符串,諸如CustCity = TextBox4.Text
將失敗。 您將必須在需要的CustCity = '" + TextBox4.Text + "'"
添加引號CustCity = '" + TextBox4.Text + "'"
即使您不能使用參數或ORM,我也建議您為TextboxN以外的其他文本框命名。
此外,如果您使用的是網格視圖,我不知道此代碼將如何工作? 您只填充一行?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.