如何从C#中的SQL Server数据库中检索数据?

Viv*_*gon 33 c# sql sql-server

我有一个包含3列的数据库表firstname,Lastnameage.在我的C#Windows应用程序中,我有3个文本框,名为textbox1...我使用以下代码建立了与SQL Server的连接:

SqlConnection con = new SqlConnection("Data Source = .;
                                       Initial Catalog = domain;
                                       Integrated Security = True");
con.Open();
SqlCommand cmd = new SqlCommand("Select * from tablename", con);
Run Code Online (Sandbox Code Playgroud)

我想从我的数据库中获取值; 如果我给textbox1它一个值必须匹配数据库中的值并检索其他详细信息到相应的文本框.

我尝试过这种方法,但它不起作用:

cmd.CommandText = "select * from tablename where firstname = '" + textBox1.Text + "' ";
Run Code Online (Sandbox Code Playgroud)

我怎样才能检索文本框中的所有其他值?

Tho*_*and 69

 public Person SomeMethod(string fName)
        {
            var con = ConfigurationManager.ConnectionStrings["Yourconnection"].ToString();

            Person matchingPerson = new Person();
            using (SqlConnection myConnection = new SqlConnection(con))
            {
                string oString = "Select * from Employees where FirstName=@fName";
                SqlCommand oCmd = new SqlCommand(oString, myConnection);
                oCmd.Parameters.AddWithValue("@Fname", fName);           
                myConnection.Open();
                using (SqlDataReader oReader = oCmd.ExecuteReader())
                {
                    while (oReader.Read())
                    {    
                        matchingPerson.firstName = oReader["FirstName"].ToString();
                        matchingPerson.lastName = oReader["LastName"].ToString();                       
                    }

                    myConnection.Close();
                }               
            }
            return matchingPerson;
        }
Run Code Online (Sandbox Code Playgroud)

这里没有什么需要注意的:我使用了参数化查询,这使您的代码更安全.使用该"where x = "+ Textbox.Text +""部件制作select语句的方式可以使您注意SQL注入.

我把它改成了:

  "Select * from Employees where FirstName=@fName"
  oCmd.Parameters.AddWithValue("@fname", fName);  
Run Code Online (Sandbox Code Playgroud)

那么这段代码将要做的是:

对您的数据库执行SQL语句,以查看是否有任何第一个名称与您提供的名称匹配.如果是这种情况,那个人将被存储在一个Person对象中(请参阅下面的我对该课程的回答).如果没有匹配,则Person对象的属性将是null.

显然我并不确切知道你要做什么,所以有一些事情需要注意:当有超过1个具有匹配名称的人时,只有最后一个人会被保存并返回给你.如果您希望能够存储此数据,可以将它们添加到List<Person>.

使人更清洁的人类:

 public class Person
    {
            public string firstName { get; set; }
            public string lastName { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

现在调用方法:

Person x = SomeMethod("John");
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用来自Person对象的值填充文本框,如下所示:

txtLastName.Text = x.LastName;
Run Code Online (Sandbox Code Playgroud)

  • 请注意,using 语句将处理connection.close。在底层,SqlConnection.Dispose() 调用 SqlConnection.Close() 方法,而 SqlCommand.Dispose() 调用 SqlCommand.Close()。 (2认同)