-3

私の c# 構文について助けを求めるために書いています。「sda.Fill(dt);」で構文を取得し続けます その理由がわかりません。

  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;
    }
}
4

7 に答える 7

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;
}
于 2013-03-22T17:05:55.950 に答える
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"
于 2013-03-22T16:58:44.497 に答える
1

GetData()元の投稿に示されているように、メソッドに構文上の問題はありません。メソッドの本体全体をコメント アウトしてから、一度に 1 つずつコメントを解除して、実際の問題を切り分けることができます。

しかし、構文エラーはないようです。無効な SQL があります。実行しようとしているSQLは次のとおりです。

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

それには2つの問題があります。

  • 最後の閉じ (右) 括弧は構文エラーです。
  • パラメータは引用符で囲まないでください。

あなたの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;
}
于 2013-03-22T17:10:45.017 に答える
0

クラス コード全体が実際にこれである場合は、

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

宣言。

于 2013-03-22T17:11:56.167 に答える
0

かっこを 2 回使用することを忘れないでください。SELECT 句と ORDER BY 句でも同様です。

于 2013-03-22T17:02:54.787 に答える
0

以下のようにあなたのコードボルクで

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;
}

ここでの問題は、入力する前に接続を開いていないことです。

于 2013-03-22T17:03:06.653 に答える
0

どこにも接続を開いていません。使用する前に、接続を開く必要があります。

于 2013-03-22T17:04:02.587 に答える