проблема с получением данных из базы данных - PullRequest
6 голосов
/ 13 сентября 2011

Я пытаюсь получить данные из базы данных, используя приведенный ниже код .....

если в таблице нет данных, она всегда переходит к это утверждение

Я использую соединитель mysql.net для получения данных, и я делаю приложения winforms используя c #

     public DataTable sales(DateTime startdate, DateTime enddate)
     {
         const string sql = @"SELECT memberAccTran_Source as Category, sum(memberAccTran_Value) as Value
                              FROM memberacctrans
                              WHERE memberAccTran_DateTime BETWEEN @startdate AND @enddate
                              GROUP BY memberAccTran_Source";

         return sqlexecution(startdate, enddate, sql);
     }

и приведенный ниже код предназначен для возврата sqlexceution ... function ..

 private static DataTable sqlexecution(DateTime startdate, DateTime enddate, string sql)
 {
         var table = new DataTable();
         using (var conn = new MySql.Data.MySqlClient.MySqlConnection(connectionstring))
         {
             conn.Open();

             var cmd = new MySql.Data.MySqlClient.MySqlCommand(sql, conn);

             var ds = new DataSet();

             var parameter = new MySql.Data.MySqlClient.MySqlParameter("@startdate", MySql.Data.MySqlClient.MySqlDbType.DateTime);
             parameter.Direction = ParameterDirection.Input;
             parameter.Value = startdate.ToString(dateformat);
             cmd.Parameters.Add(parameter);

             var parameter2 = new MySql.Data.MySqlClient.MySqlParameter("@enddate", MySql.Data.MySqlClient.MySqlDbType.DateTime);
             parameter2.Direction = ParameterDirection.Input;
             parameter2.Value = enddate.ToString(dateformat);
             cmd.Parameters.Add(parameter2);

             var da = new MySql.Data.MySqlClient.MySqlDataAdapter(cmd);

             da.Fill(ds);
             try
             {
                 table = ds.Tables[0];

             }
             catch
             {
                 table = null;
             }
         }
         return table;
     }

, даже если нет данных, процесс переходит к этой строке

table = ds.Tables [0];

как я могу уменьшить это .....

Может ли кто-нибудь помочь с этим ...

Ответы [ 3 ]

4 голосов
/ 13 сентября 2011

В вашем случае, если вы считаете, что блок catch будет выполнен, если нет доступной строки, чем вы ошибаетесь, потому что даже если нет данных после того, как запрос на выборку выполняется без исключения, он создает данные со столбцами, но безстроки.

для этого, я думаю, вы можете использовать свойство ds.table[0].rows.count, которое возвращает 0, если в datatable нет строки.

if ( ds.Tables[0].Rows.Count > 0 )
     table = ds.Tables[0];
else
     table=null;
3 голосов
/ 13 сентября 2011

Я не совсем уверен, что вы спрашиваете здесь ... Я полагаю, вы хотите, чтобы он пропустил строку таблицы = ds.tables [0], если нет данных?

если в этом случае попытка / отлов не будет работать, так как она не вызовет исключение ... попробуйте что-то вроде этого ...

if(ds.Tables.Count > 0 && ds.Tables[0].Rows.Count >0)
{
    table = ds.Tables[0];
}
else
{
    table = null;
}
3 голосов
/ 13 сентября 2011

Возвращает пустую таблицу.Это обычное поведение.Если вы хотите иметь нулевую таблицу, вы должны проверить количество строк:

If ( ds.Tables[0].Rows.Count >. 0 )
     table = ds.Tables[0];
Else
     table=0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...