2

In my ASP.NET classic WebForms application, I have a class that returns a list of Role objects that I use for mapping the roles of the users in my database.

I wrote this static class:

public static class RoleHelper
{
    public static List<RoleValue> getRoles()
    {
        List<RoleValue> myroles = null;
        string connectionString = ConfigurationManager.ConnectionStrings["SQLConnStr"].ConnectionString;
        if (!string.IsNullOrWhiteSpace(connectionString))
        {
            using (SqlConnection dbconn = new SqlConnection(connectionString))
            {
                dbconn.Open();
                SqlDataAdapter cmd = new SqlDataAdapter(" SELECT groupID,Name FROM Gruppi", dbconn);
                cmd.SelectCommand.CommandType = CommandType.Text;
                DataSet ds = new DataSet();
                cmd.Fill(ds);
                if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
                {
                    myroles = new List<RoleValue>();

                    foreach (DataRow row in ds.Tables[0].Rows)
                    {
                        RoleValue myrole = new RoleValue();
                        myrole.roleID = (int)row["groupID"]; ;
                        myrole.roleName = (string)row["Name"]; ;
                        myroles.Add(myrole);
                    }
                }
                dbconn.Close();
            }
        }
        return myroles;
    }
}

At first I wrote:

List(RoleValue) myroles = null; 

Is this wrong?

In the calling function, I check if (rolesList.Count > 0) but I should check if(!rolesList is null) but null isn't allowed for lists?


MySQL and PHP parsing strange string

I'm exporting tables from Android(SQLite) to MYSQL using PHP to communicate with the server (I use XAMPP as tool).

I have a table in sqlite with a string field(named "Start"), which tells me the current time in a format that I specially designed. A example is: 0:03:14 -- 2013/8/12. I give this information to the server using HttpPost in Android.

Here comes the problem. I create the table for mysql using "varchar(50)" type for "Start" field for example. When I'm inserting into the table, I got the next message using JSON:

08-12 16:51:25.383: D/MYSQL(26304): jsonResult {"phpError":"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':36:12 -- 2013\/8\/6, \r\n\t18:36:17 -- 2013\/7\/6, 30, 57)' at line 2","Success":0,"Message":"Oops! Couldnt upload data","Start":"18:36:12 -- 2013\/8\/6"}

As you see, the original start string is 18:36:12, however, in the error message it appears "to use near ':36:12" so it seems it has some problem to "parse" the string (?). Anyone knows whats happening? Should I use different type for this field?

This is my PHP file:

<?php

    $response = array();

    require_once __DIR__ . '/db_connect.php';

    $db = new DB_CONNECT();

    $sql1 = "CREATE TABLE IF NOT EXISTS mobile_metadata(ID int, Acc int, Mag int, Gyr int, Temperature int, Grav int, 
    Light int, LinAcc int, Pressure int, Proximity int, Humidity int, RotVec int, Format varchar(50), Start varchar(50),
    Finish varchar(50), First int, Last int);";

    $result1 = mysql_query($sql1);

    //Data succesfully created/was already created
    if($result1){

        $id = $_POST['id']; $acc = $_POST['Acc']; $mag = $_POST['Mag']; $gyr = $_POST['Gyr']; $temperature = $_POST['Temperature']; $grav = $_POST['Grav'];
        $light = $_POST['Light']; $linAcc = $_POST['LinAcc']; $pressure = $_POST['Pressure']; $proximity = $_POST['Proximity']; $humidity = $_POST['Humidity'];
        $rotVec = $_POST['RotVec']; $format = $_POST['Format']; $start = $_POST['Start']; $finish = $_POST['Finish']; $first = $_POST['First']; 
        $last = $_POST['Last'];

        $sql2 = "INSERT into mobile_metadata(ID, Acc, Mag, Gyr, Temperature, Grav, LinAcc, Pressure, Proximity, Humidity, RotVec, Format, Start, Finish,
        First, Last) VALUES ($id, $acc, $mag, $gyr, $temperature, $grav, $light, $linAcc, $pressure, $proximity, $humidity, $rotVec, $format, $start, 
        $finish, $first, $last);";

        $result2 = mysql_query($sql2);

        //Data uploaded
        if($result2){

            $response['Success'] = 1;
            $response['Message'] = "Data uploaded succesfuly";
            echo json_encode($response);
        }

        //Couldnt upload data
        else{

            $response["phpError"] = mysql_error();
            $response['Success'] = 0;
            $response['Message'] = "Oops! Couldnt upload data";
            $response['Start'] = $_POST['Start'];
            echo json_encode($response);

        }
    }

    //Couldnt create the table
    else{

        $response["phpError"] = mysql_error();
        $response["Success"] = 0;
        $response["Message"] = "Oops! Couldnt create the table";
        echo json_encode($response);

    }
    ?>

Thanks.

4

5 に答える 5

4

リストを に初期化することは間違いではありませんが、次のnull方法でより広く使用されています。

List<RoleValue> myroles = new List<RoleValue>();

次に、リストを返し、呼び出し元はリストの長さをチェックして、次のように空かどうかを確認します。

List<RoleValue> listOfRoles = getRoles();

if(listOfRoles.Count == 0)
{
    // Report message to user if having no roles is worthy of a notification
}

リストのインスタンスを返すことの利点は、データバインディングやリストの反復などnull、ユーザーが行うほとんどの操作が をチェックせずに機能することです。null

于 2013-08-12T15:04:55.443 に答える
1

通常の場合、dbアクセスは機能すると想定しているため、到達します

myroles = new  List<RoleValue>();

したがって、代わりに、このインスタンスをすでに最上位に作成することができます。

List<RoleValue> myroles = null;

利点: 呼び出し元はすべてのロールを反復できます。コレクションが空の場合、単に出力が作成されません。

于 2013-08-12T15:05:06.350 に答える
0

0 個のオブジェクトを含むリストを返すことと null を返すことはどちらも完全に有効です。焦点を当てる必要があるのは、呼び出し元がメソッドから何を期待するかです。彼らは空のリストを受け取るべきですか?これにより、最初に null チェックを行う必要がなくなります。

于 2013-08-12T15:05:00.553 に答える
0

慣例により、代わりに ではなく空のリストに初期化し、他の場所nullにあるかどうかを確認するのではなく、アイテムがあるかどうかを確認する必要がありnullます。これにより、null をチェックするために型を使用してすべてのコードをいじる必要がなくなります。ほとんどの操作foreach.

于 2013-08-12T15:04:33.930 に答える
0

一般に、null の可能性があります。しかし、あなたのif節は常にtrueまたはsthだと思います。この行が実行されるように myroles = new List(); それはnullではありません。.Count プロパティを求めたほうがよい

于 2013-08-12T15:06:19.687 に答える