2017-06-07 2 views
1

Ich habe erfolgreich meine Methode zum Ausführen eines Auswahlbefehls aufgebaut. Es funktioniert gut. Dann ändere ich meinen Code für SqlDataAdapter DA = new SqlDataAdapter();Ich versuche SqlCommand in SqlDataAdapter als Parameter zu übergeben

Ich habe versucht, SqlCommand als CommandType.Text in den Parametern übergeben, aber ich kann es nicht erfolgreich. Ich bekomme einen Fehler. Gibt es einen Weg, wenn ich es als Parameter übergeben kann. Bitte sehen Sie meinen Code.

Laufcode (aspx Seite Code)

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); 
     } 
    } 

Erfolgreiche Verbindung Klassencode

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

Wie kann ich passieren CommandType.Text als Parameter für SqlDataAdapter?

Fehlercode

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

ich diese Störung erhalte:

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

Antwort

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; 
        } 
       } 
      } 
     } 

zu benutzen:

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

Sie können sogar versuchen fangen, um die Fehler zurück zu bekommen .. –

-1

Der Fehler, dass Sie auch nicht zu CommandType.Text verwandt ist, es sagt die Verbindung Eigenschaft von initialisiert haben SelectCommand. Im Grunde sollten Sie "command.Connection = conn;" um diesen Fehler loszuwerden. Wenn Sie immer noch mit einem anderen Problem konfrontiert sind, ist es besser, diese Details in den Fragen anzugeben, um eine genaue Antwort zu geben.

+0

Ich habe Verbindung als Parameter 'conn' in die Methode übergeben' SqlDataAdapter DA = new SqlDataAdapter (command.CommandType.ToString(), anschl) ' – user4221591

0

Eigentlich sollten Sie das Verbindungsobjekt auf SQLCommand.Hope geben es Ihnen

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

Reds hat die Antwort. zum Reinigen einfach den Code ein wenig nach oben ...

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; 
     } 
    } 
Verwandte Themen