Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“多部分标识符”;TextBox1.Text";无法在C#ASP.NET中绑定?_C#_Asp.net_Sql Server_Visual Studio - Fatal编程技术网

“多部分标识符”;TextBox1.Text";无法在C#ASP.NET中绑定?

“多部分标识符”;TextBox1.Text";无法在C#ASP.NET中绑定?,c#,asp.net,sql-server,visual-studio,C#,Asp.net,Sql Server,Visual Studio,我正在做一个培训的实践项目;我的处理程序已经明确禁止了参数化和面向安全性的编码,这是为了从根本上解决问题。这就是说,我的主页上有一个gridview,其中有一个超链接字段,可以将用户带到一个页面,在那里他们可以编辑文本框中的行数据。该行由“ProductId”列显示,因为它是自动递增且唯一的。这些值显示得非常完美,因此我知道我的查询字符串很好,但是当我尝试使用button事件进行更新时,会收到一条错误消息,上面说 无法绑定多部分标识符“TextBox1.Text” 我所有的文本框。我的代码如下。

我正在做一个培训的实践项目;我的处理程序已经明确禁止了参数化和面向安全性的编码,这是为了从根本上解决问题。这就是说,我的主页上有一个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();
                }
            }
        }
    }
}

您必须将
TextBox
控件的
Text
属性的值传递给查询,而不是作为字符串传递给“TextBox.Text”:

string updateQuery = "UPDATE ProductInstance SET CustId = " + TextBox1.Text + ", CustName = '" + TextBox2.Text + "', .... " + x;
注意


如果“Text”属性的值是字符串,则必须在值的两侧放置一个
,如上例所示。

必须将
文本框
控件的
文本
属性的值作为字符串传递给查询,而不是“TextBox.Text”:

string updateQuery = "UPDATE ProductInstance SET CustId = " + TextBox1.Text + ", CustName = '" + TextBox2.Text + "', .... " + x;
注意


如果“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更新查询。如果TextBox4.Text是字符串,则类似于
CustCity=TextBox4.Text的操作将失败。您必须在需要的地方添加引号
CustCity='“+TextBox4.Text+'”

即使您不能使用参数或ORMs,我也建议您将文本框命名为TextboxN以外的名称


此外,如果您使用的是网格视图,我不知道该代码如何工作?您只填充了一行?

您的查询将按原样执行,
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更新查询。如果TextBox4.Text是字符串,则类似于
CustCity=TextBox4.Text的查询将失败。您必须在需要时添加引号
CustCity='“+TextBox4.Text+”

即使您不能使用参数或ORMs,我也建议您将文本框命名为TextboxN以外的名称


此外,如果您使用的是网格视图,我不知道这段代码将如何工作?您只填充了一行?

请使用参数执行此操作。否则,您将对SQL注入敞开大门

SQLCommand cmd = new SQLCommand();
cmd.CommandText = "UPDATE ProductInstance SET CustId = @CustID WHERE .... ";
cmd.Parameters.AddWithValue("@CustID", TextBox1.Text);
cmd.ExecuteNonQuery();

使用参数执行此操作。否则,您将对SQL注入敞开大门

SQLCommand cmd = new SQLCommand();
cmd.CommandText = "UPDATE ProductInstance SET CustId = @CustID WHERE .... ";
cmd.Parameters.AddWithValue("@CustID", TextBox1.Text);
cmd.ExecuteNonQuery();

如果必须将22个文本框组合成一个字符串,我不建议使用字符串连接。使用
string.Format
StringBuilder
代替。好奇,@Zebi,为什么不使用字符串连接?string.Format是否有一个缺点,它比string.Format有优势,或者它只是更干净/更方便编写?@Brazos:因为组合字符串值会生成多个字符串实例。如果可以的话,还有一个问题:当我使用string.Format方法时,'var query=string.Format(queryFormat,TextBox1.Text,'我在'query'下面收到一条错误消息,上面说不能在for中使用多个类型,使用fixed或declaration语句,当我使用Akram上面显示的方式时,我没有显示错误消息,但原始主页将不再加载;它只是说永远加载。这是怎么回事?最佳的方法是f遵循此练习的目标,学习SQL和框架本身是如何工作的。他的问题和所有进一步的评论表明,他需要一些基本知识。对于SQL,请查看是否必须将22个文本框组合成一个字符串,我不建议使用字符串串联。使用
string.Format
StringBuilder
相反,奇怪的是,@Zebi,为什么不使用字符串连接呢?字符串.Format是否有一个缺点,它比string.Format有优势,或者更干净/更方便编写?@Brazos:因为组合字符串值会生成多个字符串实例。如果可以的话,还有一个问题:当我使用string.Format方法时,'var query=string.FormaT(queryFormat,TextBox1.Text,'我在'query'下面收到一条错误消息,上面说不能在for中使用多个类型,使用fixed或declaration语句,当我使用Akram上面显示的方式时,我没有显示错误消息,但原始主页将不再加载;它只是说永远加载。这是怎么回事?最佳的方法是f遵循此练习的目标,学习SQL和框架本身是如何工作的。他的问题和所有进一步的评论表明,他需要一些基本知识。对于SQL,请看一看谢谢,Zebi。为什么CustCity=TextBox4会以字符串形式失败?通过确保生成有效的SQL更新查询,您的意思是在回答中使用示例代码吗?是的,请先看一些SQL教程,然后尝试使用数据库管理器工具执行查询以进行学习。如果要更新包含字符串值的字段,则必须使用引号。谢谢,Zebi。为什么CustCity=TextBox4会作为字符串失败?通过确保生成有效的SQL更新查询,您的意思是使用示例代码i吗n您的答案?是的,请先看一些SQL教程,然后尝试使用数据库管理器工具执行查询,以进行学习。如果您要更新包含字符串值的字段,则必须使用引号。感谢您的回答,但正如我在问题中指定的那样,出于对