2017-06-07 55 views
1

我已经成功构建了执行select命令的方法。它工作正常。然后我更改我的代码SqlDataAdapter DA = new SqlDataAdapter();尝试在SqlDataAdapter中传递SqlCommand作为参数

我试图在参数中通过SqlCommand作为CommandType.Text,但我无法成功完成。我得到错误。如果我可以将它作为参数传递,有什么办法吗?请参阅我的代码。

运行的代码(aspx页面代码)

if ((!string.IsNullOrEmpty(user_login.Value)) && (!string.IsNullOrEmpty(user_pass.Value))) 
{ 
     // username & password logic 
     DataTable dt = new DataTable(); 
     string strQuery = "SELECT 1 FROM TBL_USER_INFO WHERE USERNAME = @USERNAME AND PASSWORD = @PASSWORD"; 

     SqlCommand cmd = new SqlCommand(strQuery); 
     cmd.Parameters.Add("@USERNAME", SqlDbType.VarChar).Value = user_login.Value.Trim(); 
     cmd.Parameters.Add("@PASSWORD", SqlDbType.VarChar).Value = user_pass.Value.Trim(); 

     DBConnection conn_ = new DBConnection(); 

     dt = conn_.SelectData(cmd); 

     if (conn_.SQL_dt.Rows.Count > 0) 
     { 
      Response.Redirect("Home.aspx", false); 
     } 
    } 

连接成功,类代码

public DataTable SelectData(SqlCommand command) 
{ 
    try 
    { 
     conn.Open(); 

     SqlDataAdapter DA = new SqlDataAdapter(); 

     command.CommandType = CommandType.Text; 
     command.Connection = conn; 

     DA.SelectCommand = command; 
     DA.Fill(SQL_dt); 

     return SQL_dt; 
    } 
    catch (Exception ex) 
    { 
     return null; 
    } 
    finally 
    { 
     conn.Close(); 
    } 
} 

如何传递CommandType.TextSqlDataAdapter参数?

错误代码

public DataTable SelectData(SqlCommand command) 
{ 
    try 
    { 
     conn.Open(); 

     SqlDataAdapter DA = new SqlDataAdapter(command.CommandType.ToString(), conn); 

     // command.CommandType = CommandType.Text; 
     // command.Connection = conn; 
     DA.SelectCommand = command; 
     DA.Fill(SQL_dt); 

     return SQL_dt; 
    } 
    catch (Exception ex) 
    { 
     return null; 
    } 
    finally 
    { 
     conn.Close(); 
    } 
} 

我收到此错误:

System.InvalidOperationException: Fill: SelectCommand.Connection property has not been initialized.
at System.Data.Common.DbDataAdapter.GetConnection3(DbDataAdapter adapter, IDbCommand command, String method)...

回答

1
public DataTable SelectData(string query) 
     { 
      DataTable dt = new DataTable(); 
      using (SqlConnection con = new SqlConnection("Your Connection String here")) 
      { 
       con.Open(); 
       using (SqlCommand cmd = con.CreateCommand()) 
       { 
        cmd.CommandText = query; 
        cmd.CommandType = CommandType.Text; 
        using (SqlDataAdapter adp = new SqlDataAdapter(cmd)) 
        { 
         adp.Fill(dt); 
         return dt; 
        } 
       } 
      } 
     } 

要使用:

SelectData("select * from yourTable"); 
+0

你甚至可以使用try catch来捕获错误返回.. –

-1

,你得到是不相关的CommandType.Text错误,它说你已经初始化的连接属性SelectCommand中。基本上你应该取消注释“command.Connection = conn;”摆脱这个错误。如果您仍然遇到其他问题,最好在问题中提供这些详细信息以提供准确的答案。

+0

我已经通过该方法连接的参数''conn' SqlDataAdapter的DA =新SqlDataAdapter的(command.CommandType.ToString(),康涅狄格州)' – user4221591

0

其实你应该传递SQLCommand.Hope连接对象它帮助你

DBConnection conn_ = new DBConnection(); 
SqlCommand cmd = new SqlCommand(strQuery,conn_); 
1

红人有答案。只是为了清洁代码一点点......

public DataTable SelectData(string query) 
    { 
     using (var connection = new SqlConnection("myConnectionString")) 
     using (var command = new SqlCommand(query, connection)) 
     using (var adapter = new SqlDataAdapter(command)) 
     { 
      var dt = new DataTable(); 

      connection.Open(); 
      adapter.Fill(dt); 

      return dt; 
     } 
    }