所以我一直在制作一个简单的c#win表格应用程序,用于传说相关联的东西,我一直在使用.SDF数据库,这是我非常新的。
尝试制作搜索选项时,我遇到了这个错误:
缺少参数。 [参数序数= 1]
这是我的代码:(我确实在命令中添加了参数。)
public DataTable GetDataTableSummoners(string Summoner, string Champion)
{
DataTable t = new DataTable();
try
{
var cmd = new SqlCeCommand();
cmd.CommandText = "SELECT * FROM Summoner";
if (!String.IsNullOrEmpty(Summoner))
{
SqlCeParameter param = new SqlCeParameter();
param.ParameterName = "@Summoner";
param.Value = Summoner;
cmd.Parameters.Add(param);
cmd.CommandText = "SELECT * FROM Summoner WHERE name = @Summoner";
}
var adapter = new SqlCeDataAdapter(cmd.CommandText, conn);
adapter.Fill(t);
}
catch (System.Data.SqlServerCe.SqlCeException ex)
{
System.Diagnostics.Debug.Print("Error: " + ex.Message);
}
return t;
}
答案 0 :(得分:10)
您正在将参数添加到命令中 - 但是您在这里忽略了命令:
var adapter = new SqlCeDataAdapter(cmd.CommandText, conn);
您只传入命令文本,但不包含参数。你想要:
var adapter = new SqlCeDataAdapter(cmd, conn);
(我还建议对命令使用using
语句,并更改方法参数名称以遵循.NET命名约定。哦,你似乎没有使用champion参数.. 。)
哦,你可以像这样更容易地添加一个参数(同时指定类型,这是一个好主意):
cmd.Parameters.Add("@Summoner", SqlDbType.NVarChar).Value = Summoner;
答案 1 :(得分:0)
在DataAdapter中传递完整的命令对象,不仅仅是命令文本
var adapter = new SqlCeDataAdapter(cmd, conn);
或者您可以添加像这样的参数
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand(commandText, connection);
command.Parameters.Add("@ID", SqlDbType.Int);
command.Parameters["@ID"].Value = customerID;
}
或者您也可以使用command.Parameters.AddWithValue
。