如何从文本框(windows窗体)检查主键是不是存在于我的数据库中,c#

Posted

技术标签:

【中文标题】如何从文本框(windows窗体)检查主键是不是存在于我的数据库中,c#【英文标题】:How to check if the primary key exists in my database from a textbox (windows form), c#如何从文本框(windows窗体)检查主键是否存在于我的数据库中,c# 【发布时间】:2015-11-06 16:21:27 【问题描述】:

我在 Windows 窗体应用程序中有一个文本框和一个按钮。 当我在文本框中输入数字并按下按钮时,我想检查主键 (persId) 是否存在于我的 sql 数据库/数据集(使用 Visual Studio 制作)中。我不知道如何将文本与数据库中的 persId 进行比较。

如果 persId 存在,我想在一个新表单中填写两个文本框并显示 persId 和 persName。

我是 C# 编程的新手,所以我可能错过了一些东西。我查看了how to check if value exists in database from textbox c#,但找不到答案。

提前致谢!

    public void searchPersId(string persId)
    
        SqlConnection conn = new SqlConnection();
        SqlCommand myCommand = new SqlCommand("SELECT persId FROM Customers  WHERE persId = @persId", conn); 
        myCommand.Parameters.AddWithValue("@persId", persId);


        if (textBox1.Text = myCommand  ) //I dont know how to compare the values of textbox with myCommand..
        
            //Show values (persId and persName) in two textBoxes in a new form. 
        

        else
        
            MessageBox.Show("The ID does not exist.");
        


    

【问题讨论】:

您需要执行该命令才能从数据库中获取结果。 【参考方案1】:

首先,对所有实现IDisposable 的东西使用using-statement,例如处理非托管资源和关闭连接的连接,即使出现错误也是如此。

然后您必须打开连接并使用ExecuteReader 让数据读取器检查是否至少有一条具有该ID 的记录,您可以使用reader.HasRows。如果您想要如上所述,您还必须选择persName

using(var conn = new SqlConnection())
using(var myCommand = new SqlCommand("SELECT persId, persName FROM Customers  WHERE persId = @persId", conn))

    myCommand.Parameters.AddWithValue("@persId", persId);
    conn.Open();
    using(var rd = myCommand.ExecuteReader())
    
        bool personExists = rd.HasRows;
        if(personExists)
        
            // advance the reader to the first record, presuming there is only one, otherwise use a loop while(rd.Read)
            rd.Read();
            string persName = rd.GetString(1); // second field
            // ...
        
        else
        
            MessageBox.Show("The ID does not exist.");
        
    

【讨论】:

【参考方案2】:

你也可以使用 ExecuteScalar

public void searchPersId(string persId)
    
        SqlConnection conn = new SqlConnection();
        SqlCommand myCommand = new SqlCommand("SELECT persName FROM Customers  WHERE persId = @persId", conn);
        myCommand.Parameters.AddWithValue("@persId", persId);

        object personName = myCommand.ExecuteScalar();

        if(!string.IsNullOrEmpty(personName.ToString()))
        //if (textBox1.Text = myCommand) //I dont know how to compare the values of textbox with myCommand..
        
            //Show values (persId and persName) in two textBoxes in a new form. 
            textBox2.Text = personName.ToString();
        
        else
        
            MessageBox.Show("The ID does not exist.");
        
    

【讨论】:

由于您只需要检查一个值来检查记录是否存在,因此这是更快、最好的方法。【参考方案3】:

首先你必须执行命令。

SqlDataReader dr = myCommand.ExecuteReader(CommandBehavior.CloseConnection);



if (dr.HasRows)

    // ... if it has rows then you know it match
 
else 

   // ... data doesn't exists

然后你就可以比较结果了。

【讨论】:

以上是关于如何从文本框(windows窗体)检查主键是不是存在于我的数据库中,c#的主要内容,如果未能解决你的问题,请参考以下文章

如何检测windows窗体中的控件并对其进行编辑c#

如何在 Windows 窗体 C# 中为文本框设置 Scintilla

C#。当我尝试检查用户是不是存在于我的 SQL 数据库中时,我的 Windows 窗体应用程序崩溃

将 Windows 窗体列表框保存到文本文件 C#

如何通过在 C# windows 窗体中的文本框中输入来更改图像的大小?

c#windows窗体程序中如何写程序删除窗体上的多余的textbox文本框