错误:从对象类型System.Web.UI.WebControls.TextBox到已知的托管提供程序本机类型

时间:2017-10-06 20:26:40

标签: c# sql asp.net

我有一个recettextbox字段我试图让用户输入一些值,例如RE0001234并查询数据库然后将值返回到标签。现在,如果我在我的查询中的代码中放入我自己的值,它会按预期将结果返回到标签但是当请求用户输入时,我得到此错误:对象类型System.Web.UI中不存在映射。 WebControls.TextBox到已知的托管提供程序本机类型。

protected void receiptbox_TextChanged(object sender, EventArgs e)
{
    string getReceipt = receiptbox.Text;

}
protected void sealresultquery_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
{

}
protected void searchbutton_Click(object sender, EventArgs e)
{

    sealresult.Text = "";
    receiptbox.Text = "";
    string getReceipt = receiptbox.Text;
    string connString = @"Data Source=SQL;Initial Catalog=XYZDATABASE;User ID=ADMIN;Password=*********";
    string query = "Select seal1 from dbo.RECEIPTHEADER where receipt = @getReceipt";
    SqlConnection conn = new SqlConnection(connString);
    SqlCommand comm = new SqlCommand(query, conn);
    comm.Parameters.Add(new SqlParameter(@getReceipt, receiptbox));


    using (conn)
    {
        try
        {
            conn.Open();
            SqlDataReader reader = comm.ExecuteReader();
            while(reader.Read())
            {
                sealresult.Text += reader[0].ToString();

            }
            reader.Close();
        }
        catch(Exception ex)
        {
            querystatus.Text = ex.Message;
        }

    }

}

对于我缺少的任何建议,非常感谢任何帮助!

3 个答案:

答案 0 :(得分:1)

.Text属性缺少收据箱控件的结尾,请使用此更改comm.Parameters.Add(...

comm.Parameters.Add(new SqlParameter("@getReceipt", receiptbox.Text));

并将receiptbox.Text = "";行移至使用结束,因为它会在使用前清除输入。

OR

改变这样的行的顺序。

string getReceipt = receiptbox.Text;
receiptbox.Text = "";

并使用getReceipt代替receiptbox.Text

comm.Parameters.Add(new SqlParameter("@getReceipt", getReceipt));

答案 1 :(得分:0)

您的设置顺序错误:

tags

尝试:

receiptbox.Text = "";
string getReceipt = receiptbox.Text;

更新: 如果你这样做,那么Paramname就是TextBox的文本:

string getReceipt = receiptbox.Text;
receiptbox.Text = "";

除了其他答案外,请尝试此操作:

comm.Parameters.Add(new SqlParameter(@getReceipt, receiptbox.Text));

答案 2 :(得分:0)

当您调用Parameters.Add()方法时,您使用的是Add(String,Object) overload, which has been marked as obsolete我相信参数的值无法确定,所以就好像你是试图找到没有身份证的收据。

查看其他methods of the SqlParameterCollection class,了解他们采用的参数。 Add()方法的第二个值始终是数据库类型,而不是值。

试试这个:

    LinkedList<Animal> aL = LinkedList<Animal>();

或者(相同但更短):

comm.Parameters.Add(new SqlParameter(@getReceipt, SqlDbType.VarChar)).Value = receiptbox.Text;

您还要使用comm.Parameters.Add("@getReceipt", SqlDbType.VarChar).Value = receiptbox.Text; 将表单中的值设置为空,以便将其删除。此行上方和下方的行也不会为解决方案添加任何值。