Member 13269698 Ответов: 2

Asp.net вызвано исключение: неправильный синтаксис рядом с '='.


Здравствуйте, я пытаюсь сделать регистрацию, в которой, как только вы выбираете курс(выпадающий список), пакеты, доступные для выбранного курса, отображаются автоматически, но он продолжает выдавать это исключение : неправильный синтаксис рядом с '='. Спасибо.

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Configuration;
using System.Data.SqlTypes;
using System.Data;

namespace WebApplication2
{
    public partial class _4 : System.Web.UI.Page
    {
        string cs = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
        SqlConnection con;
        string cmd;
        SqlDataReader rdr;
        protected void Page_Load(object sender, EventArgs e)
        {
            cmd = "select bat_id,start_d from Batch; ";  
        }

        protected void Submit_Click(object sender, EventArgs e)
        {
            string name    = Name.Text;
            string pid     = PID.Text;
            string pass    = Pass.Text;
            DateTime dob   = DateTime.Parse(DOB.Text);
            string gender  = Gender.SelectedValue;
            string course  = CourseList.SelectedValue;
            string email   = Email.Text;

     

        }

        protected void CourseList_SelectedIndexChanged(object sender, EventArgs e)
        {
            string where = CourseList.SelectedValue.ToString(); 
            string InitQuerry = "SELECT bat_id as Value, Year(start_d) as 'Start' , YEAR(start_d)+duration as 'End'" +
                                "FROM Batch, course" +
                                "WHERE c_name = @cname";

            string cs = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
            using (SqlConnection con = new SqlConnection(cs))
            {
                SqlCommand cmd = new SqlCommand(InitQuerry, con);
                cmd.Parameters.Add(new SqlParameter("@cname", SqlDbType.VarChar, 10));
                cmd.Parameters["@cname"].Value = where; (Error is in this line. )
                con.Open();
                SqlDataReader rdr = cmd.ExecuteReader();
                while (rdr.Read())
                {
                    string BatID = (String)(rdr.GetSqlValue(0));
                    string duration = rdr.GetSqlValue(1) + "-" + rdr.GetSqlValue(2);
                    Batch.Items.Add(new ListItem(BatID, duration));
                }
                con.Close();
            }


        }
    }
}


Что я уже пробовал:

Я не знаю, что теперь делать, так как не могу понять, в чем причина этого исключения.

F-ES Sitecore

Используйте отладчик, чтобы посмотреть содержимое "InitQuerry" - содержит ли он допустимый SQL-оператор?

2 Ответов

Рейтинг:
19

Karthik_Mahalingam

добавьте пробел в запрос

string InitQuerry = "SELECT bat_id as Value, Year(start_d) as 'Start' , YEAR(start_d)+duration as 'End'" +
                               " FROM Batch, course" +
                               " WHERE c_name = @cname";


Member 13269698

Спасибо, это сработало.Не могли бы вы объяснить мне, как добавление пробелов помогло избавиться от ошибки ?

Karthik_Mahalingam

запрос генерируется без пробелов

SELECT bat_id as Value, Year(start_d) as 'Start' , YEAR(start_d)+duration as 'End'FROM Batch, courseWHERE c_name = @cname 

запустите это в среде sql management studio и проверьте синтаксис

courseWHERE
это недопустимый синтаксис
так и должно быть
course WHERE 

Member 13269698

Спасибо. :)

Karthik_Mahalingam

добро пожаловать

Рейтинг:
0

Kornfeld Eliyahu Peter

cmd.Parameters["@cname"].Value = where; (Error is in this line. )

Что где? Один ключевое слово[^]...


Member 13269698

строку где = CourseList.SelectedValue.ToString (); где удерживается значение элемента, выбранного из списка couselist. Даже если я изменю его имя на что-то против, это вызовет одно и то же исключение.

Kornfeld Eliyahu Peter

Вы читали документацию по ссылке?
"where" - это ключевое слово в C#, и компилятор интерпретирует его как таковое независимо от того, сколько переменных у вас есть с этим именем...