1

C#からSQLへのスキルを向上させようとしています...現在、このコードを使用して、アプリケーションサーバーからデータを取得しています。私はこれを書くための他の2つの方法を教えてくれる2つの異なるDBAを持っていますが、これを改善または変更する必要があるかどうかを判断しようとしています。もしそうなら、私は本当にある種の例をいただければ幸いです。

参考:このコード...

db.con(user.Authority)

...本質的には「新しいsqlconnection」コードです。

DataTable dtInfo = new DataTable("SomeInfo");
using (SqlConnection con = db.con(user.Authority))
        {
            string command = "SOME SQL STATEMENT;";
            using (SqlCommand cmd = new SqlCommand(command,con))
            {
                cmd.CommandType = CommandType.Text;
                cmd.Parameters.AddWithValue("@Param", sqlDbType).Value = Param;
                con.Open();
                cmd.ExecuteNonQuery();

                **********
                *** OR ***
                **********

                cmd.CommandType = CommandType.Text;
                cmd.Parameters.AddWithValue("@Param", sqlDbType).Value = Param;
                using (SqlDataAdapter da = new SqlDataAdapter(cmd))
                {
                    da.Fill(dtInfo );
                }
            }
        }

それで、私が提供された情報を理解しているなら、これは私の最良のルートですか?

        using (SqlConnection con = db.con(user.Authority))
        {
            string command = "SELECT [TBL_EMPLOYEE].[ACTIVE_DIRECTORY] FROM [TBL_EMPLOYEE];";
            using (SqlCommand cmd = new SqlCommand(command, con))
            {
                con.Open();
                using (SqlDataReader reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        MessageBox.Show(reader["ACTIVE_DIRECTORY"].ToString());
                    }
                }
            }

そして最後にもう1つ...これにより、

cmd.Dispose();
etc...
4

3 に答える 3

1

コードは特定のクエリによって異なります。クエリが (SELECT のように) データ行を取得する場合は、da.Fill() ルートに進みます。データベースに変更を加えるだけのクエリ (INSERT、UPDATE、DELETE など) の場合は、ExecuteNonQuery() を使用します。

于 2013-01-03T16:54:58.883 に答える
0

私はそのSqlDataAdapterバージョンを使用しません。SqlCommandオブジェクトとを使用するバージョンSqlDataReaderはパフォーマンスが向上し、返される実際のデータについてより多くの洞察を得ることができます。

// Assumes the following sql:
//   SELECT foo, bar FROM baz

// error checking left out for simplicity
var list = new List<SomeClass>();
using(var reader = cmd.ExecuteReader()) {
   while(reader.Read()) {
      list.Add(new SomeClass {
         // NOTE: you can see the columns that the c# is referencing
         //       and compare them to the sql statement being executed
         Foo = (string)reader["foo"],
         Bar = (string)reader["bar"]
      });
   }
}

後で経験のレベルが上がるにつれて、SqlCommandおよびSqlDataReaderクラスの他の機能を使用して、コードをできるだけ速く実行できるようになります。ルートの使用を開始すると、.NET の他の場所には存在しない操作があるため、これまで行ってきたのとSqlDataAdapterまったく同じことを行う方法を最終的に再学習する必要があります。SqlCommandSqlDataReader

于 2013-01-03T16:55:25.480 に答える
0

ExecuteNonQuery は、影響を受けた行数を返します。
DataTable は、その数値を取得する効率的な方法ではありません。

int rowsRet = cmd.ExecuteNonQuery();

SqlCommand.ExecuteNonQuery メソッド

于 2013-01-03T17:24:21.307 に答える