SqlCommand参数不起作用

时间:2013-12-03 11:13:11

标签: c# sql winforms

当我在SSMS中执行以下命令时,我得到了我期望的结果 -

SELECT *
FROM [Event]
WHERE Active = 'True'
AND [Name] LIKE '%P%'

即。显示名称包含P的所有事件

但是,当我在用C#编写的WinForms应用程序中构建此命令时,我总是得到一个空的数据表。

我使用以下代码 -

string sqlText = "SELECT * " +
                 "FROM Event " +
                 "WHERE Active = @Active";
SqlCommand sqlCom = new SqlCommand();
sqlCom.Parameters.Add("@Active", SqlDbType.Bit).Value = active;
if (txtSearchName.Text != null && txtSearchName.Text.Length > 0)
{
    sqlText += " AND [Name] LIKE '@Name'";
    string value = "%" + txtSearchName.Text + "%";
    sqlCom.Parameters.Add("@Name", SqlDbType.VarChar).Value = value;
}
sqlText += " ORDER BY [Date] DESC;";
sqlCom.CommandText = sqlText;
DataTable table = Express.GetTable(sqlCom);
DataView view = new DataView(table);
DataTable show = view.ToTable(true, "ID", "Date", "Name");
dataEventsFound.DataSource = show;

请注意Express.GetTable是一种简单地添加SQLConnection并使用DataReader填充和返回DataTable的方法。我不相信错误在于Method,因为它在我编写的这个和其他应用程序中被使用了数百次。

我认为错误与命令文本和@Name参数有关,但我无法准确确定问题是什么,以及为什么我的DataTable总是为空。

2 个答案:

答案 0 :(得分:10)

@Name参数中删除单引号。

sqlText += " AND [Name] LIKE @Name";

答案 1 :(得分:0)

此行之后:sqlCom.CommandText = sqlText;

您应该添加以下行:sqlCom.ExecuteNonQuery();