2015-04-17 2 views
1

У меня есть следующий код:Как показать результат SQL-запроса в текстовом поле?

dbConnection cn = new dbConnection(); 
SqlCommand cmd = new SqlCommand(); 
protected void dropdown_student_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    string StudentGUID = dropdown_student.SelectedValue; 
    cn.con.Open(); 
    cn.cmd.Connection = cn.con; 
    cn.cmd.CommandText = "select SUM(Marks) AS 'Total' from Marksheet where StudentGUID = " + StudentGUID + " "; 
    dr = cn.cmd.ExecuteReader(); 
    if (dr.HasRows) 
    {    
     while (dr.Read()) 
     { 
      textbox_total.Text = dr["Total"].ToString(); 
     } 
     cn.con.Close(); 
    } 
} 

Я хочу, чтобы показать общую стоимость марок в текстовом поле, но он не работает. Может кто-то указать мне верное направление?

+0

Вы получаете какую-либо ошибку или какой результат попадает в dr ["Total"]? –

+0

какое значение вы получаете в "textbox_total.Text"? –

+0

@ Ошибка Aravind Sivam выглядит так: Неправильный синтаксис рядом с «DB73801». и строка равна ---- dr = cn.cmd.ExecuteReader(); –

ответ

1

попробовать что-то вроде этого:

// define your query upfront - using a PARAMETER! 
string query = "SELECT SUM(Marks) FROM dbo.Marksheet WHERE StudentGUID = @StudentID;"; 

// put the SqlConnection and SqlCommand into using blocks  
using (dbConnection cn = new dbConnection()) 
using (SqlCommand cmd = new SqlCommand(query, cn)) 
{ 
    // define the parameter value 
    cmd.Parameters.Add("@StudentID", SqlDbType.UniqueIdentifier).Value = dropdown_student.SelectedValue; 

    cn.Open(); 

    // use ExecuteScalar if you fetch one row, one column exactly 
    object result = cmd.ExecuteScalar(); 
    cn.Close(); 

    if(result != null) 
    { 
     int value = (int)result; 
     textbox_total.Text = value.ToString(); 
    } 
} 
+0

@SimpleMan: какие одиночные кавычки? Где? При использовании ** параметров ** в SQL-запросе (поскольку вы всегда ** всегда должны), нет необходимости в одинарных кавычках .... –

+1

Тогда ваш комментарий не извещен! :-) –

-1

Попробуйте поставить одинарную кавычку вокруг переменной GUID в SQL запросе.

cn.cmd.CommandText = "select SUM(Marks) AS 'Total' from Marksheet where StudentGUID = '" + StudentGUID + " '"; 
0

Вы неверный SQL-запрос. Попробуйте, как показано ниже:

string query = string.Format("SELECT SUM(Marks) FROM dbo.Marksheet WHERE StudentGUID = '{0}';", StudentID); 

Всегда старайтесь следовать этой стандартной практике, и вы никогда не потерпите неудачу.

+0

Стандартная практика будет использовать запрос 'Parameterized', check @ marc_s answer –

+0

Вы правы. Но я говорил только о конкатенации строк. –

Смежные вопросы