Как установить формат даты в соединении с SQL? - PullRequest
0 голосов
/ 31 мая 2011

В Microsoft SQL Server Management Studio после вызова хранимой процедуры я вижу, что время имеет формат 2011-05-20 19:56:09 в таблице.

Однако в моей программе на C # после использования OdbcConnection для получения записи из таблицы я обнаружил, что время в формате 05/20/2011 19:56:09.Поэтому я вручную конвертирую формат MM/DD/YYYY hh:mm:ss в YYYY-MM-DD hh:mm:ss (Собственно, как мне проверить, что формат h или HH, поскольку показанный час - 19?).

У меня вопрос, почему ив какой части соединения формат меняется?Как я могу установить неизменную культуру в моей связи?

cmd = new OdbcCommand("{?=CALL stored_procedure_in_SQL(?,?)}", m_SqlConn);
cmd.Parameters.Add(new OdbcParameter("RETURN_VALUE", OdbcType.Int, 4,
    ParameterDirection.ReturnValue, false, 0, 0, null, 
    DataRowVersion.Default, null));

//@parameter1
cmd.Parameters.Add("@parameter1", OdbcType.VarChar, 50).Value = value1;

//@parameter2
cmd.Parameters.Add("@parameter2", OdbcType.Int)=value2;

object objTime=ds.Tables[0].Rows[0][0]
Console.WriteLine(objTime.Tostring()) //05/20/2011 19:56:09
DateTime dateTime = Cdate(objTime, "MM/dd/yyyy h:mm:ss tt"); 
//2011-05-20 19:56:09 
Console.WriteLine(dateTime.ToString("yyyy-MM-dd HH:mm:ss")); 

//Function Cdate
static public DateTime Cdate(object val, string format)
{
    // check if the object is a date time alread
    string str;
    if(val is DateTime)
    {
        // Since val is already a dateTime,Return here
        return (DateTime)val; 
    }

    // convert via string
    if(val != DBNull.Value)
    {
        str = val.ToString().Trim();
    }
    else
    {
        str = "";
    }

    if(str == "")
    {
        return DateTime.MinValue;
    }
    else
    {
        return DateTime.ParseExact(str, format, 
            CultureInfo.InvariantCulture);
    }
}

Ответы [ 2 ]

8 голосов
/ 31 мая 2011

Нельзя установить формат DateTime в строке подключения.

То, что вы видите, это просто разные форматирования определенного (внутреннего) представления DateTime.

Форматирование определяется инструментами, которые вы используете, и для кода .NET - культура, в которой вы вошли.

Если вы хотите отобразить время, то вам нужно отформатировать, хотя при использовании строки пользовательского формата, как у вас, нет элементов CultureInfo.

Проверьте различные ToString перегрузки на DateTime.

0 голосов
/ 31 мая 2011

Вы не можете установить формат даты в строке подключения, но вы можете вызвать SET DATEFORMAT DMY в пакете запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...