2013-03-22 3 views
-3

Я пишу, чтобы запросить некоторую помощь по синтаксису C#. Я продолжаю получать синтаксис в «sda.Fill (dt)»; и я не могу понять причину.Ошибка синтаксиса SQLCommand

using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Web; 
    using System.Web.UI; 
    using System.Web.UI.WebControls; 
    using System.Data; 
    using System.Data.SqlClient; 
    using System.Configuration; 

    public partial class Default2 : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     string query = "select distinct Price_type from Price"; 
     DataTable dt = GetData(query); 
     ddlPrice.DataSource = dt; 
     ddlPrice.DataTextField = "Price_type"; 
     ddlPrice.DataValueField = "Price_type"; 
     ddlPrice.DataBind(); 

     ddlPrice2.DataSource = dt; 
     ddlPrice2.DataTextField = "Price_type"; 
     ddlPrice2.DataValueField = "Price_type"; 
     ddlPrice2.DataBind(); 
     ddlPrice2.Items[1].Selected = true; 
    } 
} 

    protected void Compare(object sender, EventArgs e) 
    { 
     string query = string.Format("select price, date from Price where Price_type = '{0}' order by date)", ddlPrice.SelectedItem.Value); 
     DataTable dt = GetData(query); 

    string[] x = new string[dt.Rows.Count]; 
    decimal[] y = new decimal[dt.Rows.Count]; 
    for (int i = 0; i < dt.Rows.Count; i++) 
    { 
     x[i] = dt.Rows[i][0].ToString(); 
     y[i] = Convert.ToInt32(dt.Rows[i][1]); 
    } 
     LineChart1.Series.Add(new AjaxControlToolkit.LineChartSeries { Name = ddlPrice.SelectedItem.Value, Data = y }); 

     query = string.Format("select price, date from Price where Price_type = '{0}' order by date)", ddlPrice2.SelectedItem.Value); 
    dt = GetData(query); 

    y = new decimal[dt.Rows.Count]; 
    for (int i = 0; i < dt.Rows.Count; i++) 
    { 
     x[i] = dt.Rows[i][0].ToString(); 
     y[i] = Convert.ToInt32(dt.Rows[i][1]); 
    } 
     LineChart1.Series.Add(new AjaxControlToolkit.LineChartSeries { Name = ddlPrice2.SelectedItem.Value, Data = y }); 
    LineChart1.CategoriesAxis = string.Join(",", x); 

     LineChart1.ChartTitle = string.Format("{0} and {1} Order Distribution", ddlPrice.SelectedItem.Value, ddlPrice2.SelectedItem.Value); 
    LineChart1.Visible = true; 
} 

private static DataTable GetData(string query) 
{ 
    DataTable dt = new DataTable(); 
    string constr = ConfigurationManager.ConnectionStrings["bwic testConnectionString"].ConnectionString; 
    using (SqlConnection con = new SqlConnection(constr)) 
    { 
     using (SqlCommand cmd = new SqlCommand(query)) 
     { 
      using (SqlDataAdapter sda = new SqlDataAdapter()) 
      { 
       cmd.CommandType = CommandType.Text; 
       cmd.Connection = con; 
       sda.SelectCommand = cmd; 
       sda.Fill(dt); 
      } 
     } 
     return dt; 
    } 
} 
+0

Какая ошибка? – jrummell

+0

Благодарим за отзыв. VS хранит отображение «sda.Fill (dt)»; как синтаксическая ошибка в функции «GetData». Я не могу понять, почему. Извинения за неясную информацию. Большое спасибо. – user1574185

+0

Хорошо, но какое именно сообщение об ошибке в окне вывода? Это важная часть :) – jrummell

ответ

1

date может быть зарезервирован ключевым словом, в зависимости от версии, которую вы используете. Вместо этого напишите [date]. И это

"select price, date from Price where Price_type = '{0}' order by date)" 

должен быть

"select price, date from Price where Price_type = '{0}' order by date" 
+0

Уважаемый @Linus, Спасибо за ваше предложение. Я сожалею, что ваше предложение не разрешило ошибку - «Сведения об исключении: System.Data.SqlClient.SqlException: неправильный синтаксис рядом»). ». Спасибо. – user1574185

+0

@ user1574185, ну нет начала '(', а end ')'. –

+0

Благодарим вас за помощь и время. Я немного новичок в C#, отсюда и глупые ошибки, извините. Большое спасибо – user1574185

0

Не забывайте использовать скобки дважды - в пункте SELECT, и в ORDER BY пункте тоже.

+0

Не могли бы вы написать весь запрос здесь? Пожалуйста, прочтите [faq] (http://stackoverflow.com/faq) – Freakyuser

0

в программном коде bolck ниже

using (SqlConnection con = new SqlConnection(constr)) 
{ 
    using (SqlCommand cmd = new SqlCommand(query)) 
    { 
     using (SqlDataAdapter sda = new SqlDataAdapter()) 
     { 
      cmd.CommandType = CommandType.Text; 
      cmd.Connection = con; 
      sda.SelectCommand = cmd; 
      sda.Fill(dt); 
     } 
    } 
    return dt; 
} 

изменить его

using (SqlConnection con = new SqlConnection(constr)) 
{ 

    using (SqlCommand cmd = new SqlCommand(query)) 
    { 
     using (SqlDataAdapter sda = new SqlDataAdapter()) 
     { 
      con.Open(); 
      cmd.CommandType = CommandType.Text; 
      cmd.Connection = con; 
      sda.SelectCommand = cmd; 
      sda.Fill(dt); 
     } 
    } 
    return dt; 
} 

Проблема здесь в том, что вы открыли нету никакой связи перед заполнением.

+0

Спасибо за ваш ответ, и я добавил открытое соединение, но, к сожалению, я все равно получаю ту же ошибку ---- Описание: Необработанный исключение произошло во время выполнения текущего веб-запроса. Просмотрите трассировку стека для получения дополнительной информации об ошибке и ее возникновении в коде. Сведения об исключении: System.Data.SqlClient.SqlException: неправильный синтаксис рядом с ')'. – user1574185

0

Вы не открыли соединение нигде. Вы должны открыть соединение, прежде чем сможете его использовать.

1

Вы можете попробовать с этим кодом

using (var con = new SqlConnection(constr)) 
{ 

    using (var cmd = new SqlCommand(query)) 
    { 
     using (var sda = new SqlDataAdapter()) 
     { 
      con.Open(); 
      cmd.CommandType = CommandType.Text; 
      cmd.Connection = con; 
      sda.SelectCommand = cmd; 
      sda.Fill(dt); 
     } 
    } 
    return dt; 
} 
1

Там нет ничего синтаксически неправильно с методом GetData(), как показано в исходном посте. Вы можете попробовать прокомментировать весь метод, а затем начать раскувывать вещи по одному, чтобы изолировать актуальную проблему.

Но, похоже, у вас нет синтаксической ошибки: у вас есть недопустимый SQL. SQL вы пытаетесь выполнить это:

select price, date from Price where Price_type = '{0}' order by date) 

Он имеет две вещи неправильно с ним:

  • закрытия (справа) скобка в конце концов, это ваша ошибка синтаксиса и
  • параметр не должны быть заключены в кавычки.

Ваш SQL должен выглядеть что-то вроде

select price, date from Price where Price_type = {0} order by date 

Ваш метод должен выглядеть следующим образом:

private static DataTable GetData1(string query , string p0) 
{ 
    DataTable dt = new DataTable(); 
    string constr = ConfigurationManager.ConnectionStrings["bwic testConnectionString"].ConnectionString; 
    using (SqlConnection con = new SqlConnection(constr)) 
    using (SqlCommand cmd = con.CreateCommand()) 
    using (SqlDataAdapter sda = new SqlDataAdapter(cmd)) 
    { 
    cmd.CommandText = query; 
    cmd.CommandType = CommandType.Text; 
    SqlParameter p = new SqlParameter() ; 
    p.Value = p0Value ; 
    cmd.Parameters.Add(p) ; 
    con.Open(); 
    sda.Fill(dt); 
    con.Close(); 
    } 
    return dt; 
} 
0

Если весь ваш код класса действительно это, вам не хватает закрытия} в конец файла для

public partial class Default2 : System.Web.UI.Page 
{ 

dec бъявлению.

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