我想从我的数据库中检索多个数据。我正在使用 C# 和 sql 服务器

I want to retrieve multiple data from my data base. Im using C# and sql server

这是我的代码,如果我只提供一列它就无法检索多个数据,但是当我提供多列时它就无法工作我使用 c# 和 sql 服务器。

 SqlConnection con3 = new SqlConnection(conString);
 con3.Open();
 if (con3.State == System.Data.ConnectionState.Open)
 {
     string s = "SELECT ([reg_grade] ,[t_name],[start_time], [end_time]) from addteacher where class_id='" + comboBox2.SelectedItem.ToString() + "' ";
     SqlCommand cm = new SqlCommand(s, con3);
     SqlDataReader dr1 = cm.ExecuteReader();
     while (dr1.Read())
     {
         grade_att.Text = (dr1["reg_grade"]).ToString();
         tname_att.Text = (dr1["t_name"]).ToString();
         stime.Text = (dr1["start_time"]).ToString();
         etime.Text = (dr1["end_time"]).ToString();
     }
 }
 con3.Close();

我不知道这是否是问题所在,但我从未见过用括号括起来的列名。 尝试

"SELECT [reg_grade], [t_name], [start_time], [end_time] from addteacher where class_id='" + ...

您的 SQL- 声明无效,因为您的字段名称周围有括号。

改变这个:

string s = "SELECT ([reg_grade] ,[t_name],[start_time], [end_time])..."

看起来像这样:

string s = "SELECT [reg_grade] ,[t_name],[start_time], [end_time]..."

希望对您有所帮助。

您应该尝试用 post 发送完整的 error-/exception-descriptions。这不仅可以让您自己找出问题,还可以帮助您在此处回答问题。

@mybirthname 在很多方面都是正确的。

使用 SQL 包装器

我喜欢使用 Dapper Dot Net made by StackExchange. Very good and easy to use when you are writing your own sql to pull data from the database. It's worth utilizing parameterized queries; this should help (using loosely) to avoid writing insecure sql statements which are vulnerable to sql injection attacks. Bear in mind you SQL has to be written in such a way to avoid sql injection Owasp SQL Injection Information

它还有助于处理一系列问题,如所解释的那样here in another question

回到问题..

我建议打开 SQL Management Studio(甚至 LinqPad)并尝试 运行 自己查询。我确定问题是基于 select:

SELECT ([reg_grade] ,[t_name],[start_time], [end_time]) from addteacher

这应该是

SELECT [reg_grade] ,[t_name],[start_time], [end_time] from addteacher

如果您先在 SQL 中测试您的查询,您可以很容易地找出查询中的错误。

@Jacopo & @K.Berger 是围绕参数的括号,我太慢了 :) 然而,这并没有解决 SQL 注入的安全风险。