【问题标题】:Bringing up pictures from a database as I search for the name搜索名称时从数据库中调出图片
【发布时间】:2014-09-09 13:26:46
【问题描述】:

我在尝试编写这个程序时需要帮助。在这方面我完全是个菜鸟,所以请原谅我的缺点,但我正在尝试创建一个搜索功能,它会在您写下第一个字母后立即从数据库中完成名称。我已经成功地做到了,现在我也必须从同一个数据库中调出图片,我遇到了一些错误。你能看看我的代码并告诉我有什么问题吗?这也够了吗?

注意:我的目标是在他们写下名字时显示图片。

     void showpic(string queryStr)
        {   
        SqlConnection conn = new SqlConnection(@"server adress");
        conn.Open();
        SqlCommand execute = new SqlCommand("SELECT Pernr from View_PhoneBook where DisplayName=" + textBox1.Text, conn);
        try
        {
            StringCollection View_Phonebook = new StringCollection();
            SqlDataReader reader = execute.ExecuteReader();
            while (reader.Read())
            {
                View_Phonebook.Add(reader.GetString(0));
            }
            pictureBox1.ImageLocation.Equals("url" + View_Phonebook + ".jpg");
        }
        catch (Exception ex)
        { 
        }
        conn.Close();
    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        showpic(textBox1.Text);           
    }                        

【问题讨论】:

  • 通过使用此语句'new SqlCommand("SELECT Pernr from View_PhoneBook where DisplayName=" + textBox1.Text',您将让自己对 SQL 注入开放。您应该使用 SQLCommand 参数。更多信息: msdn.microsoft.com/en-us/library/…
  • 你得到什么错误?
  • 当我尝试在搜索的文本框中输入名称时,我得到“没有名为“x”的列”。

标签: c# sql search


【解决方案1】:

在这一行的字符串中添加引号,如下所示:

SqlCommand execute = new SqlCommand('SELECT Pernr from View_PhoneBook where DisplayName= @text', conn);

execute.Parameters.Add("text", SqlDbType.Text).Value = Textbox1.text;

【讨论】:

  • 这应该可以解决您的“没有名为“x”的列”的问题! SQL 认为 Textbox1.text 在您的原始实现中是一列,而不是字符串。 ;)
  • "Too many characters in character literal" 是我这样做的错误,我做错了吗?我刚刚复制了它。
  • 实际上在C#中我认为你必须使用SqlParameter。您不能像现在这样在 sql 命令的末尾添加参数。这个链接应该有帮助! buddylindsey.com/sql-parameters-in-c
  • 我已经更新了我的答案,尝试展示如何使用 SqlParameter。希望这会有所帮助:)
  • 感谢您的回复。您的回答对我有帮助,我还没有获得支持的声誉,但我选择了您的回答作为答案,我会在获得代表后立即纠正这种情况。 :) 非常感谢。
【解决方案2】:

我会建议,您应该使用 StoredProc 来执行此操作。 它不是解决问题的方法,而是另一种方法。 这样你就不会面临任何这样的问题。 此外,使用 StoredProc 比在每个文本更改事件上构造查询要好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-06
    • 2014-09-11
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多