我访问一个存储过程过程时一直出错:
"[ODBC SQL Server Driver][SQL Server]过程 'InsertNew' 需要参数 '@Title',但未提供该参数。"
这是什么意思? 生成插入命令的代码:
insertCmd = conn.CreateCommand();
insertCmd.CommandText = this.storedProcedure;
insertCmd.CommandType = CommandType.StoredProcedure;
//
// derive parameters from database.
//
conn.Open();
DeriveParameters(insertCmd);
//
// setting source parameters for using later.
//
foreach (DbParameter p in insertCmd.Parameters)
{
p.SourceColumn = p.ParameterName.StartsWith("@") ? p.ParameterName.Substring(1) : p.ParameterName;
}执行命令的代码:
Hashtable availableColumns = this.GetAvailableColumns();
//
// binding parameter values for insert command.
//
foreach (DbParameter p in insertCmd.Parameters)
{
if (p.Direction == ParameterDirection.ReturnValue || p.Direction == ParameterDirection.Output)
{
continue;
} if (availableColumns.ContainsKey(p.SourceColumn))
{
p.Value = row[p.SourceColumn];
}
else
{
p.Value = DBNull.Value;
}
}
try
{
insertCmd.ExecuteNonQuery();
}
catch (DbException e)
{
//
// the handler returns true means continue insertion.
//
bool ignore = this.OnInsertionFailed(new InsertionFailedHandlerArgs(row, e));
if (!ignore)
{
//
// rool back all insertions.
//
trans.Rollback();
return;
}
}
"[ODBC SQL Server Driver][SQL Server]过程 'InsertNew' 需要参数 '@Title',但未提供该参数。"
这是什么意思? 生成插入命令的代码:
insertCmd = conn.CreateCommand();
insertCmd.CommandText = this.storedProcedure;
insertCmd.CommandType = CommandType.StoredProcedure;
//
// derive parameters from database.
//
conn.Open();
DeriveParameters(insertCmd);
//
// setting source parameters for using later.
//
foreach (DbParameter p in insertCmd.Parameters)
{
p.SourceColumn = p.ParameterName.StartsWith("@") ? p.ParameterName.Substring(1) : p.ParameterName;
}执行命令的代码:
Hashtable availableColumns = this.GetAvailableColumns();
//
// binding parameter values for insert command.
//
foreach (DbParameter p in insertCmd.Parameters)
{
if (p.Direction == ParameterDirection.ReturnValue || p.Direction == ParameterDirection.Output)
{
continue;
} if (availableColumns.ContainsKey(p.SourceColumn))
{
p.Value = row[p.SourceColumn];
}
else
{
p.Value = DBNull.Value;
}
}
try
{
insertCmd.ExecuteNonQuery();
}
catch (DbException e)
{
//
// the handler returns true means continue insertion.
//
bool ignore = this.OnInsertionFailed(new InsertionFailedHandlerArgs(row, e));
if (!ignore)
{
//
// rool back all insertions.
//
trans.Rollback();
return;
}
}
"[ODBC SQL Server Driver][SQL Server]过程 'InsertNew' 需要参数 '@Title',但未提供该参数。"
晕倒!
{
using (DbConnection conn = this.GetConnection())
{
DataTable dt = new DataTable("郑州大学新闻信息");
dt.Columns.Add("Title", typeof(String)).ExtendedProperties["FieldUnique"] = true;
dt.Columns.Add("PubDepartment", typeof(String)); DataRow row = dt.NewRow();
row["Title"] = "新闻标题1";
row["PubDepartment"] = "发布单位";
dt.Rows.Add(row); row = dt.NewRow();
row["Title"] = "新闻标题2";
row["PubDepartment"] = "sdfasdfsdf";
dt.Rows.Add(row); row = dt.NewRow();
row["Title"] = "新闻标题3";
row["PubDepartment"] = "发布单位";
dt.Rows.Add(row); DbCommand cmd = conn.CreateCommand();
cmd.CommandText = "InsertRow";
cmd.CommandType = CommandType.StoredProcedure; conn.Open();
OdbcCommandBuilder.DeriveParameters((OdbcCommand)cmd); //Database2 database = GetDatabase(dt, this.textBox2.Text);
//database.ColumnNotFound += new ColumnNotFoundHandler(database_ColumnNotFound);
//database.ExistedRowFound += new ExistedRowFoundHandler(database_ExistedRowFound);
//database.InsertionFailed += new InsertionFailedHandler(database_InsertionFailed); foreach (DataRow r in dt.Rows)
{
//database.Insert(r);
//database.Flush();
cmd.Parameters["@Title"].Value = r["Title"];
cmd.Parameters["@PubDepartment"].Value = r["PubDepartment"];
cmd.ExecuteNonQuery();
}
}}
catch (NoAnyColumnFoundException)
{
this.label1.Text = "在数据库中找不到任何匹配的字段。";
}
catch (Exception ex)
{
this.label1.Text = ex.Message;
}
{
if (this.rbOleDb.Checked)
{
return new OleDbConnection("Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=bget;Data Source=(local)");
}
else
{
return new OdbcConnection("Driver={SQL Server};Server=(local);Database=bget;Uid=sa");
}
}private void DeriveParameters(DbCommand cmd)
{
if (this.rbOleDb.Checked)
{
OleDbCommand oleCmd = cmd as OleDbCommand;
if (oleCmd == null)
{
throw new ArgumentException("An OleDbCommand is required.", "cmd");
}
else
{
OleDbCommandBuilder.DeriveParameters(oleCmd);
}
}
else
{
OdbcCommand odbcCmd = cmd as OdbcCommand;
if (odbcCmd == null)
{
throw new ArgumentException("An OdbcCommand is required.", "cmd");
}
else
{
OdbcCommandBuilder.DeriveParameters(odbcCmd);
}
}
}private void btnSelect_Click(object sender, EventArgs e)
{
this.label1.ResetText();
try
{
using (DbConnection conn = this.GetConnection())
{
DataTable dt = new DataTable("郑州大学新闻信息");
dt.Columns.Add("Title", typeof(String)).ExtendedProperties["FieldUnique"] = true;
dt.Columns.Add("PubDepartment", typeof(String)); DataRow row = dt.NewRow();
row["Title"] = "新闻标题1";
row["PubDepartment"] = "发布单位";
dt.Rows.Add(row); row = dt.NewRow();
row["Title"] = "新闻标题2";
row["PubDepartment"] = "sdfasdfsdf";
dt.Rows.Add(row); row = dt.NewRow();
row["Title"] = "新闻标题3";
row["PubDepartment"] = "发布单位";
dt.Rows.Add(row); DbCommand cmd = conn.CreateCommand();
cmd.CommandText = this.textBox2.Text;
cmd.CommandType = CommandType.StoredProcedure; conn.Open();
this.DeriveParameters(cmd); foreach (DataRow r in dt.Rows)
{
cmd.Parameters["@Title"].Value = r["Title"];
cmd.Parameters["@PubDepartment"].Value = r["PubDepartment"];
cmd.ExecuteNonQuery();
}
} }
catch (NoAnyColumnFoundException)
{
this.label1.Text = "在数据库中找不到任何匹配的字段。";
}
catch (Exception ex)
{
this.label1.Text = ex.Message;
}}
估计是个BUG,这个老外和我的问题一样.用2.0,偶遇到两个BUG了, 还有这个也是:
http://community.csdn.net/Expert/topic/4707/4707944.xml?temp=.6145288
{
this.label1.ResetText();
try
{
using (DbConnection conn = this.GetConnection())
{
DataTable dt = new DataTable("郑州大学新闻信息");
dt.Columns.Add("Title", typeof(String)).ExtendedProperties["FieldUnique"] = true;
dt.Columns.Add("PubDepartment", typeof(String)); DataRow row = dt.NewRow();
row["Title"] = "新闻标题1";
row["PubDepartment"] = "发布单位";
dt.Rows.Add(row); row = dt.NewRow();
row["Title"] = "新闻标题2";
row["PubDepartment"] = "sdfasdfsdf";
dt.Rows.Add(row); row = dt.NewRow();
row["Title"] = "新闻标题3";
row["PubDepartment"] = "发布单位";
dt.Rows.Add(row); DbCommand cmd = conn.CreateCommand();
cmd.CommandText = this.textBox2.Text;
cmd.CommandType = CommandType.StoredProcedure; conn.Open();
//this.DeriveParameters(cmd);
// **************************
//
// 显视添加参数也不行!!!
//
// **************************
DbParameter p = cmd.CreateParameter();
p.ParameterName = "@Title";
cmd.Parameters.Add(p); DbParameter p2 = cmd.CreateParameter();
p2.ParameterName = "@PubDepartment";
cmd.Parameters.Add(p2); foreach (DataRow r in dt.Rows)
{
cmd.Parameters["@Title"].Value = r["Title"];
cmd.Parameters["@PubDepartment"].Value = r["PubDepartment"];
cmd.ExecuteNonQuery();
}
} }
catch (NoAnyColumnFoundException)
{
this.label1.Text = "在数据库中找不到任何匹配的字段。";
}
catch (Exception ex)
{
this.label1.Text = ex.Message;
}}