Как лучше всего конвертировать типы между базой данных и вызовом веб-службы? - PullRequest
0 голосов
/ 09 июля 2011

Я занимаюсь разработкой веб-приложения ASP.Net C #, которое должно обращаться к базе данных с использованием ODBC, а затем передавать полученные данные в веб-службу.

Я столкнулся с проблемой при преобразовании даты, когда пытался использовать Convert.ToDateTimeи parseDate, чтобы изменить формат дат, к которым обращаются из базы данных, и изменить его на подходящий формат, необходимый для веб-службы.например:

the database datetime storage format is "MM/dd/yyyy hh:mm:ss tt"
07/15/2011 03:05:10 pm
the webservice datetime storage format is "dd/MM/yyyy hh:mm:ss"
15/07/2011 15:00:00

Как я могу изменить и преобразовать эти различные форматы для типов данных даты и времени, чтобы веб-служба приняла их правильно?

Кроме того, в булевом типе данныхвеб-сервис, который хранится в базе данных как целое число, как мне справиться с этим, чтобы веб-сервис правильно принимал логический тип данных?

, например:

the isGiven variable may have the value of 0 in database while it should be false or true in the web service as it accepts it as boolean only.
is there an implicit conversion between int and bool data types?

Ответы [ 3 ]

1 голос
/ 09 июля 2011

формат хранения даты и времени в базе данных: «ММ / дд / гггг чч: мм: сс тт»

Нет, это не так.База данных не хранит значение datetime в виде отформатированной строки, она хранит его в числовом виде, представляющем момент времени.Когда вы читаете его, вы получаете его как значение DateTime, а не string.

Чтобы преобразовать значение DateTime в формат dd/MM/yyyy hh:mm:ss, вы просто используете строку пользовательского формата:

theDate.ToString("dd'/'MM'/'yyyy HH':'mm':'ss")

Преобразование целого числа в логическое значение может быть выполнено при чтении его из базы данных:

cast(isGiven as bit)

или после него:

reader["isGiven"] != 0
0 голосов
/ 09 июля 2011

Это должно работать:

    string s = "07/15/2011 03:05:10 pm";
    // get database date / time
    DateTime dt = DateTime.ParseExact(s, "MM/dd/yyyy hh:mm:ss tt", CultureInfo.GetCultureInfo("en-US"));

    // format as web service date / time
    string ws = dt.ToString("dd/MM/yyyy hh:mm:ss", CultureInfo.GetCultureInfo("en-US"));
0 голосов
/ 09 июля 2011

Возможно, я слишком упрощен, но разве ваш метод веб-службы не может просто принять bool и поместить логику отображения в вызов службы (или вспомогательный метод) перед записью в базу данных?

public void DoSomething(bool myBool)
{
    var myBoolConverted = myBool ? 1 : 0;

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