1

所以我一直在为一些与英雄联盟相关的东西制作一个简单的 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;
}
4

2 回答 2

10

您正在将参数添加到命令中 - 但是您在这里忽略了命令本身:

var adapter = new SqlCeDataAdapter(cmd.CommandText, conn);

传递了不包含参数的命令文本。你要:

var adapter = new SqlCeDataAdapter(cmd, conn);

(我还建议using对命令使用语句,并更改方法参数名称以遵循 .NET 命名约定。哦,您似乎没有使用 Champion 参数...)

Oh, and you can add a parameter much more easily like this (also specifying the type, which is a good idea):

cmd.Parameters.Add("@Summoner", SqlDbType.NVarChar).Value = Summoner;
于 2013-06-19T12:08:55.717 回答
0

In DataAdapter Pass complete Command Object not only Command Text

var adapter = new SqlCeDataAdapter(cmd, conn); or You can add parameter like this

using (SqlConnection connection = new SqlConnection(connectionString))
{
    SqlCommand command = new SqlCommand(commandText, connection);
    command.Parameters.Add("@ID", SqlDbType.Int);
    command.Parameters["@ID"].Value = customerID;

 }

or you can use command.Parameters.AddWithValue also.

于 2013-06-19T12:14:44.753 回答