sql >> データベース >  >> RDS >> Sqlserver

C#DataTableに非同期でデータを入力する

    拡張メソッドが必要な場合は、コマンドに直接書き込むことができます

    public static class extensions
        {
             public async static Task<DataTable> ExecuteAndCreateDataTableAsync(this SqlCommand cmd)
             {
                 using (var reader = await cmd.ExecuteReaderAsync().ConfigureAwait(false))
                 {
                     var dataTable = reader.CreateTableSchema();
                     while (await reader.ReadAsync().ConfigureAwait(false))
                     {
                         var dataRow = dataTable.NewRow();
                         for (int i = 0; i < dataTable.Columns.Count; i++)
                         {
                             dataRow[i] = reader[i];
                         }
                         dataTable.Rows.Add(dataRow);
                     }
                     return dataTable;
    
                 }
             }
             public static void LoadParams(this SqlCommand cmd, params SqlParameter[] parameters)
             {
                 if (parameters != null)
                 {
                     foreach (var parameter in parameters)
                     {
                         if (parameter != null)
                         {
                             if (parameter.Value == null)
                                 parameter.Value = DBNull.Value;
    
                             cmd.Parameters.Add(parameter);
                         }
                     }
                 }
             }
    
    
             private static DataTable CreateTableSchema(this SqlDataReader reader)
             {
                 DataTable schema = reader.GetSchemaTable();
                 DataTable dataTable = new DataTable();
                 if (schema != null)
                 {
                     foreach (DataRow drow in schema.Rows)
                     {
                         string columnName = System.Convert.ToString(drow["ColumnName"]);
                         DataColumn column = new DataColumn(columnName, (Type)(drow["DataType"]));
                         dataTable.Columns.Add(column);
                     }
                 }
                 return dataTable;
             }
        }
    

    とあなたの方法:

    private async Task<DataTable> ExecuteQueryInternalAsync(string commandText, CommandType commandType, SqlConnection sqlConnection, SqlTransaction transaction, params SqlParameter[] parameters)
            {
                using (SqlCommand cmd = new SqlCommand(commandText, sqlConnection) { CommandType = commandType, CommandTimeout = this.config.MainConnectionTimeoutInSeconds })
                {
                    if (transaction != null)
                        cmd.Transaction = transaction;
    
                    cmd.LoadParams(parameters);
    
                    if (sqlConnection.State == ConnectionState.Closed)
                        await sqlConnection.OpenAsync();
    
                    var datatable =  await cmd.ExecuteAndCreateDataTableAsync();
                    return datatable;
                }
            }
    



    1. IPアドレスを持つクライアントは、サーバーのAzureSQLデータベースにアクセスできません

    2. Oracle-ユーザーに複数の行を挿入させる方法

    3. PHP / MySQLで一意のコードを生成しますか?

    4. AndroidSQLiteDBが値の追加を完了していません