缺少参数。 [参数序数= 1]

时间:2013-06-19 12:05:56

标签: c# sql-server-ce

所以我一直在制作一个简单的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;
}

2 个答案:

答案 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