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】:

如果你只是读取数据,你不需要使用DataSetDateTableSqlDataAdapter等,只需使用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# 附近的语法不正确

c#连接mysql数据库以后 怎么的获取select语句返回的值而不是影响的条数 需要用啥样的代码写

SqlDataAdapter.Fill 命令使 SQL CPU 达到峰值