我试图通过调用存储过程将数据插入SQL Server数据库,但我收到错误
过程或函数'SHOWuser'需要参数'@userID',这是未提供的.
我的存储过程被调用 SHOWuser.我已经彻底检查了它,没有参数丢失.
我的代码是:
public void SHOWuser(string userName, string password, string emailAddress, List<int> preferences)
{
SqlConnection dbcon = new SqlConnection(conn);
try
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = dbcon;
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.CommandText = "SHOWuser";
cmd.Parameters.AddWithValue("@userName", userName);
cmd.Parameters.AddWithValue("@password", password);
cmd.Parameters.AddWithValue("@emailAddress", emailAddress);
dbcon.Open();
int i = Convert.ToInt32(cmd.ExecuteScalar());
cmd.Parameters.Clear();
cmd.CommandText = "tbl_pref";
foreach (int preference in preferences)
{
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@userID", Convert.ToInt32(i));
cmd.Parameters.AddWithValue("@preferenceID", Convert.ToInt32(preference));
cmd.ExecuteNonQuery();
}
}
catch (Exception)
{
throw;
}
finally
{
dbcon.Close();
}
Run Code Online (Sandbox Code Playgroud)
并且存储过程是:
ALTER PROCEDURE …Run Code Online (Sandbox Code Playgroud) 我有一个存储过程,其中有一个名为UserName的参数,在我的代码后面我有一个SqlCommand对象,我使用Add方法添加参数.但由于某些原因,当命令对象尝试运行ExecuteReader方法时,它会抛出异常.我完全不知所措,不知道为什么它没有识别参数.在运行ExecuteReader方法之前,我有一个断点设置,所以我可以确认命令对象确实包含正在设置的参数,这是真的.我知道当参数未添加到命令对象时,存储过程确实返回正确的数据,但在实际存储过程中是硬编码的.下面是catch块中给出的异常消息.我还将粘贴我的代码和存储过程的第一部分.我非常感谢在这个问题上的任何帮助,看到我尝试了许多不同的方法无济于事.提前致谢.
过程或函数'someStoredProcedure'需要参数'@UserName',这是未提供的.
private DataTable GetLossMitData(string code, DateTime? start, DateTime? end)
{
DataTable results = new DataTable();
string connectionString = ConfigurationManager.ConnectionStrings["asdf"].ConnectionString;
string userName = String.Empty;
try
{
using (SPSite site = new SPSite(ConfigurationManager.AppSettings["someName"]))
{
using (SPWeb web = site.OpenWeb())
{
userName = web.CurrentUser.Email.ToString();
}
}
using (SqlConnection connection1 = new SqlConnection(connectionString))
{
connection1.Open();
using (SqlCommand command1 = new SqlCommand("someStoredProcedure", connection1))
{
command1.Parameters.Add(new SqlParameter("@UserName", userName));
command1.Parameters.Add(new SqlParameter("@ProductCode", code));
SqlDataReader dr = command1.ExecuteReader(CommandBehavior.CloseConnection);
results.Load(dr);
}
connection1.Close();
}
}
catch (Exception ex) …Run Code Online (Sandbox Code Playgroud) 我被卡住了.我有一个现有的应用程序,具有一个非常大的数据库和广泛的存储过程和函数库.我想要做的就是使用DbContext来执行存储过程并返回一组数据或映射到上下文中的一个实体.这是我在网上没有发现的神奇的东西吗?有人,有人,请帮忙.这是我到目前为止所得到的(并且它不会返回任何内容,结果为-1):
var contacts = db.Database.ExecuteSqlCommand("Contact_Search @LastName, @FirstName",
new SqlParameter("@LastName", GetDataValue(args.LastName)),
new SqlParameter("@FirstName", GetDataValue(args.FirstName)));
Run Code Online (Sandbox Code Playgroud)
执行该返回-1.我也尝试过这个效果,但没有成功:
DbRawSqlQuery<Contact> data = db.Database.SqlQuery<Contact>
("EXEC Contact_Search @LastName, @FirstName",
GetDataValue(args.LastName),
GetDataValue(args.FirstName));
Run Code Online (Sandbox Code Playgroud)
我知道我可以添加一个edmx并映射到存储过程,但这不是首选方法.同样,我们的数据库包含近4.5亿条记录和一个包含近3,000个存储过程和函数的库.维持这将是一场噩梦.我是否正朝着正确的方向前进?实体框架是正确的选择吗?