C# 存储过程ADO.NET错误
您好,我有一个注册页面的存储过程,但我需要ADO.NET从各种文本框中获取值。 但是,我收到如下错误: “System.ArgumentException:不存在从对象类型System.Web.UI.WebControl.TextBox到已知托管提供程序本机类型的映射。” 然后我使用此格式添加控件中的值:C# 存储过程ADO.NET错误,c#,asp.net,ado.net,C#,Asp.net,Ado.net,您好,我有一个注册页面的存储过程,但我需要ADO.NET从各种文本框中获取值。 但是,我收到如下错误: “System.ArgumentException:不存在从对象类型System.Web.UI.WebControl.TextBox到已知托管提供程序本机类型的映射。” 然后我使用此格式添加控件中的值: cmd.Parameters.Add(new SqlParameter("@EmpID", SqlDbType.Int)); cmd.Parameters("@EmpID").Value =
cmd.Parameters.Add(new SqlParameter("@EmpID", SqlDbType.Int));
cmd.Parameters("@EmpID").Value = TextBox1.Text;
我在以下方面遇到错误:
Its showing errors for these kind of codes by appearing red line under 'Parameters'.
Non-invocable member 'System.Data.SqlClient.SqlCommand.Parameters' cannot be used like a method.
试试TextBox1。Text,TextBox是控件。Text属性保存字符串值
cmd.Parameters.Add(new SqlParameter("@EmpID", TextBox1.Text));
试试这个代码
try
{
string empdb = @"Data Source=USER-PC\SQLEXPRESS;Initial Catalog=EmployeeDB;Integrated Security=True";
using (var conn = new SqlConnection(connString))
{
using (var cmd = new SqlCommand("bridge_Type",conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@EmpID",TextBox1.Text);
cmd.Parameters.AddWithValue("@Name", TextBox2.Text);
cmd.Parameters.AddWithValue("@Mob2", TextBox3.Text);
cmd.Parameters.AddWithValue("@Email", TextBox14.Text);
cmd.Parameters.AddWithValue("@EmpType",dropdown1.SelectedValue);
conn.Open();
cmd.ExecuteNonQuery();
}
}
}
catch(Exception ex)
{
string msg = "Insert Error:"+ ex.Message;
throw new Exception(msg);
}
确保正在转换为与存储过程中的参数类型相同的类型(例如:如果EmpID的参数类型为int,则可能需要将
TextBox1.Text
值转换为int。同时检查空值。为什么不使用此格式
cmd.Parameters.Add("@parameter", SqlDBType , size).value = TextBox1.Text
您好,很抱歉,这些都是打字错误。但是,我得到的错误更像这样-非invocable成员'System.Data.SqlClient.SqlCommand.Parameters'不能像方法一样使用。当我使用这些代码时,cmd.Parameters.Add(new SqlParameter(@EmpID),SqlDbType.Int));cmd.Parameters(@EmpID).Value=TextBox1.Text;您能在没有输入错误的情况下重新发布代码吗?事实上,您正在将System.Web.UI.WebControl.TextBox作为参数传递,这是不正确的,因为它无法转换为SQL提供程序可以理解的本机类型。根据您的代码,此异常非常合理。新错误是因为您使用了pArentesses,让C#认为你想用一个字符串参数调用一个名为“Parameters”的方法。你想用括号[]哦,很抱歉,我都认不出来了,谢谢你。但这对我来说有点棘手。现在出现了另一个错误—“无法将参数值从字符串转换为Int32。”:(Int32.Parse(TextBox1.Text),TextBox.Text是字符串,数据库中的列必须是int,因此Int32.Parse(string)方法将获取字符串并为您创建Int32。我仍然收到相同的错误。插入错误:未能将参数值从字符串转换为Int32。我使用了“convert.ToInt32(TextBox1.Text);”但是结果没有变化。EmpTYpe如何?它是什么类型?这就是混淆的地方-EmpTYpe是dbo.emp中的FK。在dbo.EmpTYpe中有一个“type”,它是PK。DropDown1值进入dbo.EmpTYpe表,然后是TypeID(自动生成)EmpType在dbo.emp中被更新为EmpType。这是我消除了对这个概念的怀疑的地方:但我认为这不是一个问题。这就是混淆的地方——EmpType在dbo.emp中是一个FK。在dbo.EmpType中有一个“Type”,它是一个PK。DropDown1值进入dbo.EmpType表,然后TypeID(自动生成)在dbo.emp中被更新为EmpType
cmd.Parameters.Add("@parameter", SqlDBType , size).value = TextBox1.Text