C# ExecuteOnQuery中出错

C# ExecuteOnQuery中出错,c#,html,sql,ado.net,C#,Html,Sql,Ado.net,我的代码似乎有问题。我的.ExecuteOnQuery似乎有问题。我收到的错误是 “不存在从对象类型System.Web.UI.WebControl.TextBox到已知托管提供程序本机类型的映射。” 有人能看出我在做什么吗?非常感谢 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebCon

我的代码似乎有问题。我的.ExecuteOnQuery似乎有问题。我收到的错误是 “不存在从对象类型System.Web.UI.WebControl.TextBox到已知托管提供程序本机类型的映射。” 有人能看出我在做什么吗?非常感谢

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;


public partial class CustomerLogin : System.Web.UI.Page
{
static readonly string scriptErrorUserId =
 "<script language=\"javascript\">\n" +
 "alert (\"Error - UserId you keyed in is taken up, please key in another UserId\");\n" +
 "</script>";

static readonly string scriptSuccessNewAccount =
"<script language=\"javascript\">\n" +
"alert (\"Your account has been succesfully created - Thank You!\");\n" +
"</script>";

static readonly string scriptErrorInput =
"<script language=\"javascript\">\n" +
"alert (\"Error - Please fill up all the textboxes\");\n" +
"</script>";

protected void Page_Load(object sender, EventArgs e)
{

}



protected void Button1_Click(object sender, EventArgs e)
{
    SqlConnection sqlCon = new SqlConnection(@"Data Source=DESKTOP-UNIV3GV;Initial Catalog=Bolsen;Integrated Security=True; MultipleActiveResultSets=true;");
    sqlCon.Open();
    Type csType = this.GetType();
    //Check to ensure that UserId keyed in is not being in used by other Customers     

    SqlCommand sqlcmd;
    SqlDataReader rdr;
    string strSQLSelect = "SELECT cEmail FROM Customers ";
    sqlcmd = new SqlCommand(strSQLSelect, sqlCon);
    //SqlDataReader reader = sqlcmd.ExecuteReader();
    rdr = sqlcmd.ExecuteReader();
    while (rdr.Read() == true)


        if (txtEmail.Text == (string)rdr["cEmail"])
        {
            ClientScript.RegisterStartupScript(csType, "Error", scriptErrorUserId);
            sqlCon.Close();
            return;
        }
    if (txtEmail.Text == "")
    {
        ClientScript.RegisterStartupScript(csType, "Error", scriptErrorInput);
        sqlCon.Close();
        return;
    }
    // insert new record
    string strSQLInsert = "INSERT INTO "
        + " Customer  (Firstname, Lastname, cNumber, cCompanyName, cCompanyAddress, cEmail, cPassword)"
        + " VALUES (@FN, @LN, @Num, @CName, @CAdd, @Email, @PW)";
    sqlcmd = new SqlCommand(strSQLInsert, sqlCon);
    sqlcmd.Parameters.AddWithValue("@CFN", txtFN.Text);
    sqlcmd.Parameters.AddWithValue("@LN", txtLN.Text);
    sqlcmd.Parameters.AddWithValue("@Num", txtNum.Text);
    sqlcmd.Parameters.AddWithValue("@CName", txtCN);
    sqlcmd.Parameters.AddWithValue("@CAdd", txtCA.Text);
    sqlcmd.Parameters.AddWithValue("@Email", txtEmail.Text);
    sqlcmd.Parameters.AddWithValue("@PW", txtPwd.Text);
    sqlcmd.ExecuteNonQuery();
    sqlCon.Close();


    ClientScript.RegisterStartupScript(csType, "Success", scriptSuccessNewAccount);

    // prepare Session variables for newly registered customer

}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用System.Web.UI;
使用System.Web.UI.WebControl;
使用System.Data.SqlClient;
公共部分类CustomerLogin:System.Web.UI.Page
{
静态只读字符串scriptErrorUserId=
“\n”+
“警报(\“错误-您键入的用户ID已被占用,请键入另一个用户ID\”);\n”+
"";
静态只读字符串scriptSuccessNewAccount=
“\n”+
“警报(\“您的帐户已成功创建-谢谢!\”);\n”+
"";
静态只读字符串scriptErrorInput=
“\n”+
“警报(\“错误-请填写所有文本框\”);\n”+
"";
受保护的无效页面加载(对象发送方、事件参数e)
{
}
受保护的无效按钮1\u单击(对象发送者,事件参数e)
{
SqlConnection sqlCon=new SqlConnection(@“数据源=DESKTOP-UNIV3GV;初始目录=Bolsen;集成安全性=True;MultipleActiveResultSets=True;”);
sqlCon.Open();
类型csType=this.GetType();
//检查以确保键入的用户ID未被其他客户使用
sqlcmd命令;
SqlDataReader-rdr;
string strSQLSelect=“选择来自客户的电子邮件”;
sqlcmd=新的SqlCommand(strSQLSelect,sqlCon);
//SqlDataReader=sqlcmd.ExecuteReader();
rdr=sqlcmd.ExecuteReader();
while(rdr.Read()==true)
if(txtEmail.Text==(字符串)rdr[“cEmail”])
{
RegisterStartupScript(csType,“Error”,scriptErrorUserId);
sqlCon.Close();
返回;
}
如果(txtEmail.Text==“”)
{
RegisterStartupScript(csType,“Error”,scriptErrorInput);
sqlCon.Close();
返回;
}
//插入新记录
字符串strSQLInsert=“插入到”
+客户(名、姓、cNumber、cCompanyName、cCompanyAddress、cEmail、cPassword)
+“值(@FN、@LN、@Num、@CName、@CAdd、@Email、@PW)”;
sqlcmd=新的SqlCommand(strSQLInsert,sqlCon);
sqlcmd.Parameters.AddWithValue(“@CFN”,txtFN.Text);
sqlcmd.Parameters.AddWithValue(“@LN”,txtLN.Text);
sqlcmd.Parameters.AddWithValue(“@Num”,txtNum.Text);
sqlcmd.Parameters.AddWithValue(“@CName”,txtCN);
sqlcmd.Parameters.AddWithValue(“@CAdd”,txtCA.Text);
sqlcmd.Parameters.AddWithValue(“@Email”,txtEmail.Text);
sqlcmd.Parameters.AddWithValue(“@PW”,txtPwd.Text);
sqlcmd.ExecuteNonQuery();
sqlCon.Close();
RegisterStartupScript(csType,“Success”,scriptSuccessNewAccount);
//为新注册的客户准备会话变量
}

}

简单缺失属性
文本

本质上,它不知道如何将
文本框
(对象)转换为Sql参数

替换

sqlcmd.Parameters.AddWithValue("@CName", txtCN);


简单缺少属性
Text

本质上,它不知道如何将
文本框
(对象)转换为Sql参数

替换

sqlcmd.Parameters.AddWithValue("@CName", txtCN);


这不是你的问题(正如将军所指出的),但你应该改掉使用
AddWithValue
的习惯,它有一些怪癖,最终会咬到你。最好使用(例如)
sqlcmd.Parameters.Add(“@name”,SqlDbType.NVarChar,FieldLength)谢谢你的建议,这是我的学校教给我的,但老实说,我认为他们落后了。这不是你的问题(正如将军指出的),但你应该改掉使用
AddWithValue
的习惯,它有一些怪癖,最终会咬到你。最好使用(例如)
sqlcmd.Parameters.Add(“@name”,SqlDbType.NVarChar,FieldLength)