2017-06-07 5 views
1

私はselectコマンドを実行するためのメソッドを構築しました。それは正常に動作しています。次にコードを変更しますSqlDataAdapter DA = new SqlDataAdapter();SqlDataAdapterでSqlCommandをパラメーターとして渡そうとしています

SqlCommandCommandType.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(); 
    } 
} 

どのように私はSqlDataAdapterのパラメータとしてCommandType.Textを渡すことができますか?

エラーコード

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に関連していない、それはあなたがのの接続プロパティを初期化していると言いますコマンドを選択します。基本的には、 "command.Connection = conn;"のコメントを外す必要があります。このエラーを取り除く。まだ他の問題に直面している場合は、質問にこれらの詳細を入力して正確な回答を提供する方がよいでしょう。

+0

...少しのコードをクリーンアップするために私は、メソッドのパラメータ 'conn'として接続を渡されました' SqlDataAdapterオブジェクトDA =新しいSqlDataAdapterオブジェクト(command.CommandType.ToString()、CONN) ' – user4221591

0

実際にあなたはそれが

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

レッズあなたを助けたSQLCommand.Hopeに接続オブジェクトを渡す必要が答えを持っています。ただ、

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; 
     } 
    } 
関連する問題