Learner
Learner

Reputation: 563

execute reader doesn't respond

i have a php code.here is the code,i gonna to translate it to .NET but in some point i'm getting some trouble.

function processInput($conn, $MessageArray, $mobilenumber, $date, $odd)
{

$strSQLUSER="SELECT * FROM tbl_tiduser WHERE username='".addslashes($MessageArray[0])."' AND stat!='1' AND stat!='4'";

$result_user=odbc_exec($conn,$strSQLUSER) or die("Could not connect to database");

here is the converted .NET code

public class ProcessInput
{   
    private string msg_arr;
    private string MooseSeenInput(string MobileNo,string Date,string odd,params Array[] msg_arr)
    {


 SqlCommand com = new SqlCommand("SELECT * FROM tbl_tiduser WHERE username=@username AND stat!='1' AND stat!='4'", mycon);
                    com.Parameters.AddWithValue("@username",username);
                    using (SqlDataReader reader = com.ExecuteReader())

     // whats the next part need to come here ???

}

this is incomplete.i'm not going to compile it....

Upvotes: 0

Views: 203

Answers (3)

Marc Gravell
Marc Gravell

Reputation: 1063629

I'm all for easy; I would write a class that mirrors the record I'm reading, i.e.

public class User {
    public int Id {get;set;}
    public string Name {get;set;}
}

and use "dapper":

var user = myCon.Query<User>(
  "SELECT * FROM tbl_tiduser WHERE username=@username AND stat not in ('1','4')",
  new {username}).SingleOrDefault();

if(user == null) { /* not found, presumably throw an exception */ }

string name = user.Name; // etc

Then you don't need to mess with commands, readers, parameters etc (see how the username is being made into a db parameter cleanly?).

Upvotes: 1

McGarnagle
McGarnagle

Reputation: 102793

I would use something like this to get the column(s) you're after:

string username = null;
using (SqlDataReader reader = com.ExecuteReader()) {
    if (reader.read()) {
        username = (string)reader["mydbcolumnname"];
    }
    reader.Close();
}

Note that if you want to pull all the result rows (as opposed to stepping through them) then you'd normally use a SqlDataAdapter to fill a DataSet (instead of the reader), eg:

string username;
using (SqlDataAdapter adapter = new SqlDataAdapter(com))
{
    using (DataSet ds) 
    {
        adapter.Fill(ds);
        username = (string)ds.Tables[0].Rows[0]["mycolumnname"];
    }
}

Upvotes: 1

Jakub Konecki
Jakub Konecki

Reputation: 46008

private static void ReadOrderData(string connectionString)
{
    string queryString =
        "SELECT OrderID, CustomerID FROM dbo.Orders;";

    using (SqlConnection connection =
               new SqlConnection(connectionString))
    {
        SqlCommand command =
            new SqlCommand(queryString, connection);
        connection.Open();

        SqlDataReader reader = command.ExecuteReader();

        // Call Read before accessing data.
        while (reader.Read())
        {
            Console.WriteLine(String.Format("{0}, {1}",
                reader[0], reader[1]));
        }

        // Call Close when done reading.
        reader.Close();
    }
}

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.aspx

Upvotes: 3

Related Questions