c# SqlDataAdapter 不返回结果
Posted
技术标签:
【中文标题】c# SqlDataAdapter 不返回结果【英文标题】:c# SqlDataAdapter doesn't return results 【发布时间】:2018-08-18 13:33:03 【问题描述】:由于某种原因,我的函数有时不返回查询结果,尽管它应该(在 SQL Studio 中运行)。我知道代码不是很干净而且有点奇怪,但它有时会起作用。我想不通。 BestellNo 可以在查询中输入为整数或字符串。 我想问题可能是这条线?
if (dsUniversal.Tables[0].Rows.Count > 0)
string HA_No = "SELECT [A-Nr], B, C, [D-Nr], E FROM Table WHERE (BestellNr = '" + BestellNo + "')";
private string[] getStringData(string strSQL, string conn)
string ret = "";
DataSet dsUniversal = new DataSet();
System.Data.SqlClient.SqlConnection sConn = new System.Data.SqlClient.SqlConnection(conn);
if (sConn.State == 0)
sConn.Open();
System.Data.SqlClient.SqlDataAdapter daUniversal = new System.Data.SqlClient.SqlDataAdapter(strSQL, sConn);
daUniversal.MissingSchemaAction = MissingSchemaAction.AddWithKey;
try
daUniversal.Fill(dsUniversal);
catch (System.Data.SqlClient.SqlException sEx)
sConn.Close();
ret = "Fehler";
logIt("SQL Fehler (" + DateTime.Now.ToString() + "): " + sEx.Message, "Universal");
string[] err = ret, ret, ret, ret, ret ;
return err;
sConn.Close();
if (dsUniversal.Tables[0].Rows.Count > 0)
string var1 = dsUniversal.Tables[0].Rows[0].ItemArray[0].ToString();
string var2 = dsUniversal.Tables[0].Rows[0].ItemArray[1].ToString();
string var3 = dsUniversal.Tables[0].Rows[0].ItemArray[2].ToString();
string var4 = dsUniversal.Tables[0].Rows[0].ItemArray[3].ToString();
string var5 = dsUniversal.Tables[0].Rows[0].ItemArray[4].ToString();
string[] res = var1, var2, var3, var4, var5 ;
return res;
else
string var1 = "";
string var2 = "";
string var3 = "";
string var4 = "";
string var5 = "";
string[] res = var1, var2, var3, var4, var5 ;
return res;
【问题讨论】:
您必须使用参数来避免 SQL 注入和格式错误。如果您使用的是 DataAdapter,则无需打开和关闭连接,适配器会自动执行此操作。BestellNo can be put in as a integer or a string in the query.
不要假设。你知道它是什么,所以传递正确的数据类型(使用参数)。
【参考方案1】:
如果你只是读取数据,你不需要使用DataSet
、DateTable
和SqlDataAdapter
等,只需使用SqlDataReader
获取数据即可。
private static string[] ReadData(string queryString, string connectionString)
var result = new List<string>();
using (var connection =
new SqlConnection(connectionString))
var command =
new SqlCommand(queryString, connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
// Call Read before accessing data.
while (reader.Read())
// Please note I am just reading the value of the first column
// so if you want other columns, you would need to modify this
// to suit your needs.
result.Add(reader[0].ToString());
// Call Close when done reading.
reader.Close();
return result.ToArray();
【讨论】:
以上是关于c# SqlDataAdapter 不返回结果的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET + SqlDataAdapter 没有返回正确的查询结果
SqlDataReader 与 SqlDataAdapter:返回 DataTable 的性能哪个更好?
带有表类型参数的存储过程返回数据但 SqlDataAdapter 不会填充
SqlDataAdapter.Fill() "=" C# 附近的语法不正确