Как получить результат SQL, сохраненный в переменной С#?
У меня проблемы с поиском того, как сохранить результат SQL в строку или любой другой тип результата.
Мой SQL-запрос:
SELECT SUM(Length) FROM tbl_test WHERE TITLE LIKE 't%'
Здесь мне нужна функция, которая суммирует длину всех строк данных, где заголовок начинается с буквы "Т", при выполнении запроса в MS-SQL он возвращает "188,99" (тип SQL десятичный)
У меня вопрос, как мне сохранить это значение в переменную С#? Запрос всегда возвращает ОДНУ строку с определенным значением, которое я хочу сохранить в переменную. У меня есть функция С# для выполнения запроса, мне просто нужно, чтобы значение из этой строки, 188,99, было сохранено в переменную. Любые предложения - это круто, независимо от того, сохранен ли результат в виде десятичной переменной или строки.
Ответы
Ответ 1
Попробуйте вызвать .ExecuteScalar() на SqlCommand, который вы готовите для него. EG:
SqlConnection connection = new SqlConnection(myConnectionString);
SqlCommand cmd = connection.CreateCommand();
cmd.CommandText = "SELECT SUM(Length) FROM tbl_test WHERE TITLE LIKE 't%'";
int result = ((int)cmd.ExecuteScalar());
connection.Close();
Вы можете открывать и закрывать SqlConnections столько, сколько хотите (это SoP, чтобы открывать и закрывать каждый раз, когда вы выполняете операцию, или последовательность операций в том же методе), потому что .Net действительно не закрывает соединение для реального, это "мягко закрыть" его и снова перевести живое соединение обратно в пул соединений для последующей переработки.
Ответ 2
Вы можете использовать SqlDataReader.
Вот пример:
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["dbConnectionString"].ToString());
SqlCommand read_command = new SqlCommand("SELECT SUM(Length) FROM tbl_test WHERE TITLE LIKE '@t%'", con);
read_command.Parameters.Add("@t", SqlDbType.NVarChar).Value = Str;
SqlDataReader read_rd;
string SUM ;
try
{
con.Open();
read_rd = read_command.ExecuteReader();
if (read_pass_rd.HasRows)
{
while (read_rd.Read())
{
SUM = read_rd.GetString(0);
}
}
read_rd.Close();
con.Close();
}
catch (Exception)
{
if (con.State == ConnectionState.Open)
con.Close();
}
а "Str" - это строка, которую вы ищете, и строка "SUM" является ответом.
Ответ 3
Вам необходимо подключить С# к вашей базе данных с помощью некоторых доступных методов:
- LinQ to SQL
- ADO.NET
- LinQ to Entities
Я бы подумал, что ADO.NET - это самый простой и простой способ сделать это с учетом фактического запроса.