【问题标题】:SQL Server 2008 R2 stored procedure doesn't work (visual c#)SQL Server 2008 R2 存储过程不起作用(Visual C#)
【发布时间】:2011-02-10 08:01:10
【问题描述】:

我在过去一周左右搜索并尝试了不同的东西,我的问题可能是通过谷歌找到答案。

如果我在 SQL Server Management Studio 中执行此查询并将参数@zoekterm 替换为'%something%',它可以正常工作并返回我想要的结果。但是当我从 C# 调用相同的过程时,它什么也不返回。

这是一个错误还是我只是那么愚蠢?

这是 C# 中存储过程和函数的代码,(我知道我应该使用 switch case...)

存储过程:

-- =============================================
-- Author:      Daan
-- Create date: 
-- Description: 
-- =============================================
ALTER PROCEDURE [dbo].[quick_bedrijf] 
    -- Add the parameters for the stored procedure here
    @zoekterm varchar(100) = 0
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    SELECT bedrijf.bedrijf_nr, bedrijf.zoeknaam, bedrijf.plaats
    FROM bedrijf
    WHERE zoeknaam LIKE @zoekterm AND NIETactief = 0

    ORDER BY bedrijf.zoeknaam, bedrijf.plaats 
END

C#:

private void snel_zoek2()
{
    listView1.Items.Clear();

    con.Open();
    if (type == 1)
    {
         command1 = new SqlCommand("quick_project", con);
         colnum = 5;
    }
    else if (type == 2)
    {
         command1 = new SqlCommand("quick_bedrijf", con);
         colnum = 3;
    }
    else if (type == 3)
    {
         command1 = new SqlCommand("quick_persoon", con);
         colnum = 4;
    }
    command1.CommandType = CommandType.StoredProcedure;
    SqlParameter zoekterm = command1.Parameters.Add("@zoekterm", SqlDbType.VarChar, 100);
    zoekterm.Direction = ParameterDirection.Input;
    //command1.Parameters.Add(new SqlParameter("@zoekterm", SqlDbType.VarChar)).Value = " '%zee%'";// + textBox2.Text.ToString()+
    zoekterm.Value = "'%"+textBox2.Text.ToString()+"%'";
    // MessageBox.Show(zoekterm.Value.ToString());
    SqlDataAdapter adapt = new SqlDataAdapter();
    DataTable dt = new DataTable();
    adapt.SelectCommand = command1;
    adapt.Fill(dt);
    dataGridView1.BindingContext = new BindingContext();
    dataGridView1.DataSource = dt;

    con.Close();
}

【问题讨论】:

    标签: c# stored-procedures sql-server-2008-r2


    【解决方案1】:

    您不要将引号放入参数中(那些表示文字);应该是:

    zoekterm.Value = "%"+textBox2.Text+"%";
    

    目前它失败了,因为如果文本是“abc”,它正在寻找一个以单引号开头和结尾并包含“abc”的字符串。在 SQL 术语中,您要求它:

    LIKE '''%abc%'''
    

    【讨论】:

    • 哇,让我测试一下,所以我是那么愚蠢吧.. :P 编辑:确认!谢谢!!
    • @Daanvl 我很确定我们已经全部在某个时候做到了这一点,尤其是在首先在 SSMS 中制作查询​​,然后对其进行参数化时。你被卡住了,寻求帮助,然后得到了答案:那里没有什么愚蠢的。现在,如果您将用户的输入连接到 TSQL,那么 那个 可能符合条件 - 但您不是!
    猜你喜欢
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多