这么大岁数了还让老板炒,那真是太丢人了,太没脸见人了,,太郁闷了,太抓狂了,所以,请大家快帮我看看这段代码吧,,
生成后也显示出错,选完日期后按确定也不会显示出错,只是WEBGRID依然是没有显示,看来还是没连上数据库,但我的那个存储过程是好使的啊,我在查询器里执行了,没问题啊,请大家帮忙分析分析,,,
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using CommonLibrary;
using System.Data.SqlClient;
namespace NetApp.Web.DigitSale
{
/// <summary>
///CustSaleSearch的摘要说明。
/// </summary>
public class CustSaleSearch : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Label Label1;
protected System.Web.UI.WebControls.Label Label2;
protected System.Web.UI.WebControls.ImageButton ImageButton1;
protected System.Web.UI.WebControls.ImageButton ImageButton2;
protected System.Web.UI.WebControls.TextBox TextBox1;
protected System.Web.UI.WebControls.TextBox TextBox2;
protected ISNet.WebUI.WebGrid.WebGrid WebGrid1;
        private DataSet dataset;
private void Page_Load(object sender, System.EventArgs e)
{
        dataset = GetConditionData();
TextBox1.Text=System.DateTime.Today.ToString("yyyy-MM-dd");
TextBox2.Text=System.DateTime.Today.ToString("yyyy-MM-dd");
// 在此处放置用户代码以初始化页面
} #region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{    
this.ImageButton1.Click += new System.Web.UI.ImageClickEventHandler(this.ImageButton1_Click);
this.WebGrid1.InitializeDataSource += new ISNet.WebUI.WebGrid.DataSourceEventHandler(this.WebGrid1_InitializeDataSource);
this.Load += new System.EventHandler(this.Page_Load); }
#endregion private DataSet GetConditionData()
{
return new DataManager().GetCheckCondition();
}
private void WebGrid1_InitializeDataSource(object sender, ISNet.WebUI.WebGrid.DataSourceEventArgs e)
{

} private void ImageButton1_Click(object sender, System.Web.UI.ImageClickEventArgs e)
{
             DataTable td =GetCustSaleS(TextBox1.Text,TextBox2.Text);
WebGrid1.DataSource = td.DefaultView;
WebGrid1.DataBind();
}
private  DataTable GetCustSaleS(string Date1,string Date2)
{
return SqlHelper.ExecuteDataset(ConfigInfo.UniqueInstance.ConnectionString,
System.Data.CommandType.StoredProcedure,"web_CustSaleSearch",
this.GetStoreProcedureParameters("web_CustSaleSearch",
new object[]{Date1,Date2})).Tables[0];

}
}
}

解决方案 »

  1.   

    “/NetApp”应用程序中的服务器错误。
    --------------------------------------------------------------------------------从字符串转换为 datetime 时发生语法错误。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.SqlClient.SqlException: 从字符串转换为 datetime 时发生语法错误。源错误: 
    行 602:
    行 603: // Fill the DataSet using default values for DataTable names, etc
    行 604: da.Fill(ds);
    行 605:
    行 606: // Detach the SqlParameters from the command object, so they can be used again
     源文件: D:\NetApp\CommonLibrary\SQLHelper.cs    行: 604 另外一个网页还看不到数据库连接的到底好不好使呢,一确定就出这个错误,请大家帮看看啊,
      

  2.   

    return new DataManager().GetCheckCondition();
    这个里面有返回数据集吗?
      

  3.   

    极度怀疑字符串不是yyyy-MM-dd形式的,建议跟踪。
      

  4.   

    返回吧应该,
    我做的另一个网页,也是一直没解决的,里面引用的同样的数据集,那个WEBCOMBO里面运行时引用就是成功的,
      

  5.   

    极度怀疑字符串不是yyyy-MM-dd形式的,建议跟踪。啊,什么意思啊,那怎么能看出来是那个形式的呢,怎么跟踪呢运行时页面是显示今天的日期的啊
    只不过下面按确定想看这时间段内的数据里,WEBGRID不动,不显示出错,也不显示内容,
    但我的存储过程运行时,表是很大的
      

  6.   

    检查一下你的SqlHelper.ExecuteDataset方法吧!自己检查一下!感觉应该是这里的问题!
      

  7.   

    写错了,是:this.GetStoreProcedureParameters("web_CustSaleSearch",
    new object[]{Date1,Date2})
      

  8.   

    在存储过程里,参数的类型是VCHAR,,,那传递的TextBox1.Text不也是STRING类型吗?
    因为我现在还检查不了,大家说这里会有问题吗?
      

  9.   

    异常详细信息: System.Data.SqlClient.SqlException: 从字符串转换为 datetime 时发生语法错误。
    检查与时间有关的字段
      

  10.   

    this.GetStoreProcedureParameters("web_CustSaleSearch",
    new object[]{Date1,Date2)
    你数据库表的2个字段如果是datetime类型的话 就不能这样传参了 你必须把 Date1,Date2转成datime类型。。从你的出错信息上看 估计你的数据库的字段为datetime类型,建议你再仔细看看。。
      

  11.   


    异常详细信息: System.Data.SqlClient.SqlException: 从字符串转换为 datetime 时发生语法错误。如上,异常信息很明显表明错误来自数据库,如果按楼主所言,sp 没有任何问题的话,
    那唯一会出问题的地方就是 sp 的传入参数了,如果类型没问题的话,就是值有问题,
    比如,楼主说“在存储过程里,参数的类型是VCHAR,,,那传递的TextBox1.Text不也是STRING类型吗?”,但是楼主是否检查了 TextBox1.Text 是否为 string.Empty 呢?或者 TextBox1.Text 中含有非法字符?当 sp 中对 TextBox1.Text 对应的参数进行 datetime 类型转换时就报错了。其实能出问题的地方就那么几处,异常信息加耐心等于Debug!先睡了,晚安!明天一切都会好的!
      

  12.   

    da.Fill(ds);
    da 是否为空?
      

  13.   

    还没解决,一会儿老板就要到了,我都不知道应该怎么说,
    但是楼主是否检查了 TextBox1.Text 是否为 string.Empty 呢
    这个怎么检查啊,
    Date1,Date2转成datime这个怎么转啊,
    急急急,,,
      

  14.   

    数据表里的字段的确是DATATIME类型,但是,,
    我执行,
    EXECUTE WEB-CUSTSALESEARHCH "2004-01-01",:2007-04-11"
    执行是成功的啊,
    还应该怎么转啊,大家帮帮忙吧,,
      

  15.   

    this.GetStoreProcedureParameters("web_CustSaleSearch",
    new object[]{Date1,Date2)
    我改为这样之后,就生成出错了,显示SqlHelper.ExecuteDataset无法生成DATASETTABLE,加上后面的那个就好了,还有怎么检查SqlHelper.ExecuteDataset方法啊,,也不怪老板要炒我,我也真是太菜了,
      

  16.   

    你数据库里的字段是datetime的吧
    而你传入的TextBox1.Text和TextBox2.Text都是字符串,类型肯定不一样
    你先转换一下看看
      

  17.   

    convert.todatetime(date1.text.trim())
    要判断date1.text是不是正常的时间类型 可以加个正则表达式验证
      

  18.   

    private void ImageButton1_Click(object sender, System.Web.UI.ImageClickEventArgs e)
    {
                            convert.todatetime(TextBox1.Text.trim());
                convert.todatetime(TextBox2.Text.trim());
    DataTable td =GetCustSaleS(TextBox1.Text,TextBox2.Text);
    WebGrid1.DataSource = td.DefaultView;
    WebGrid1.DataBind();
    }
    这样写出错了,哪错了,请大家帮改一改,
      

  19.   

    CREATE PROCEDURE dbo.web_CustSaleSearch @Date1 varchar(36),@Date2 varchar(36)AS
                 convert.todatetime(Date1.trim());
                 convert.todatetime(Date2.trim());
    select A.CSCustNo,B.CustShortName,C.AccWayName,A.CSSumMoney,A.CSSumDiscMoney,
      A.CSSumMoney-A.CSSumDiscMoney as SumReceiveMoney,
    A.CSConfirm,A.CSCancel,A.CSCode
    from DigitCustSaleM A INNER JOIN DigitCust B ON A.CSCustNo
    =B.CustNo INNER JOIN DigitAccWay C ON A.CSAccWayNo=C.AccWayNo 
    where   (A.CSDate>=@Date1)  AND  (A.CSDate<=@Date2) 
    RETURN这是在存储过程里改的,也显示语法出错,应该怎么改啊,
    GO
      

  20.   

    new object[]{Date1,Date2}传进来的是什么?是一个数组,不是两个参数吧!!
      

  21.   

    还没解决,DATA1和DATA2传的是字符串啊,是参数啊,
      

  22.   


    无语中
    存储过程不用改
    这里改成private void ImageButton1_Click(object sender, System.Web.UI.ImageClickEventArgs e)
    {
    DataTable td =GetCustSaleS(convert.todatetime(TextBox1.Text.trim()),convert.todatetime(TextBox2.Text.trim()));
    WebGrid1.DataSource = td.DefaultView;
    WebGrid1.DataBind();
    }
      

  23.   

    可还是出错啊,显示不包括对TRIM的定义,应该引用哪个文件吗,
      

  24.   

    存储过程中的转换类型写的不对啊。
    CREATE PROCEDURE dbo.web_CustSaleSearch @Date1 varchar(36),@Date2 varchar(36)AS
    declare @a1 datetime,@a2 datetime
    set @a1 = cast(@Date1 as datetime)
    set @a2 = cast(@Date2 as datetime)比较的时候比较@a1和@a2。
      

  25.   

    前提是你得保证代码里传入的参数是日期类型的string(字符串)。
      

  26.   

    ALTER PROCEDURE dbo.web_CustSaleSearch @Date1 varchar(36),@Date2 varchar(36)AS
    declare @a1 datetime,@a2 datetime
    set @a1 = cast(@Date1 as datetime)
    set @a2 = cast(@Date2 as datetime
    select A.CSCustNo,B.CustShortName,C.AccWayName,A.CSSumMoney,A.CSSumDiscMoney,
      A.CSSumMoney-A.CSSumDiscMoney as SumReceiveMoney,
    A.CSConfirm,A.CSCancel,A.CSCode
    from DigitCustSaleM A INNER JOIN DigitCust B ON A.CSCustNo
    =B.CustNo INNER JOIN DigitAccWay C ON A.CSAccWayNo=C.AccWayNo 
    where   (@a1>=@Date1)  AND  (@a2<=@Date2) 
    RETURN我改成这样了,它显示语法出错啊,是SELECT附近
      

  27.   

    A.CSSumMoney-A.CSSumDiscMoney as SumReceiveMoney
    那个  ‘-’ 啥意思?
      

  28.   

    A.CSSumMoney + '-' + A.CSSumDiscMoney as SumReceiveMoney
    这样吧?
      

  29.   

    select A.CSCustNo,B.CustShortName,C.AccWayName,A.CSSumMoney,A.CSSumDiscMoney,
      A.CSSumMoney-A.CSSumDiscMoney as SumReceiveMoney,
    A.CSConfirm,A.CSCancel,A.CSCode
    from DigitCustSaleM A,DigitCust B,DigitAccWay C 
    where A.CSCustNo=B.CustNo and A.CSAccWayNo=C.AccWayNo and (A.CSDate>=@a1) and A.CSDate<=@a2) 
    这样呢?
      

  30.   

    cast(@Date2 as datetime
    右括号没有
      

  31.   

    恩,对啊,2处错误
    修改成
    cast(@Date2 as datetime)

    A.CSDate>=@a1 and A.CSDate<=@a2
      

  32.   

    CREATE PROCEDURE dbo.web_CustSaleSearch @Date1 varchar(36),@Date2 varchar(36)AS
                 convert.todatetime(Date1.trim());
                 convert.todatetime(Date2.trim());
    select A.CSCustNo,B.CustShortName,C.AccWayName,A.CSSumMoney,A.CSSumDiscMoney,
      A.CSSumMoney-A.CSSumDiscMoney as SumReceiveMoney,
    A.CSConfirm,A.CSCancel,A.CSCode
    from DigitCustSaleM A INNER JOIN DigitCust B ON A.CSCustNo
    =B.CustNo INNER JOIN DigitAccWay C ON A.CSAccWayNo=C.AccWayNo 
    where   (A.CSDate>=@Date1)  AND  (A.CSDate<=@Date2) 
    RETURN郁闷~~~什么数据库的存储过程支持.NET了?
    我终于明白为什么老板说要炒你了?
      

  33.   

    private void ImageButton1_Click(object sender, System.Web.UI.ImageClickEventArgs e)
    {
                            convert.todatetime(TextBox1.Text.trim());
                convert.todatetime(TextBox2.Text.trim());
    DataTable td =GetCustSaleS(TextBox1.Text,TextBox2.Text);
    WebGrid1.DataSource = td.DefaultView;
    WebGrid1.DataBind();
    }GetCustSaleS()中的参数是不是DateTime类型的啊?
    如果是的话,你得这样写DataTable td =GetCustSaleS(Convert.ToDatetime(TextBox1.Text.Trim()),Convert.ToDatetime(TextBox2.Text.Trim()));
      

  34.   

    ALTER PROCEDURE dbo.web_CustSaleSearch @Date1 varchar(36),@Date2 varchar(36)AS
    declare @a1 datetime,@a2 datetime
    set @a1 = cast(@Date1 as datetime)
    set @a2 = cast(@Date2 as datetime                 //少了半边括号?
    select A.CSCustNo,B.CustShortName,C.AccWayName,A.CSSumMoney,A.CSSumDiscMoney,
      A.CSSumMoney-A.CSSumDiscMoney as SumReceiveMoney,
    A.CSConfirm,A.CSCancel,A.CSCode
    from DigitCustSaleM A INNER JOIN DigitCust B ON A.CSCustNo
    =B.CustNo INNER JOIN DigitAccWay C ON A.CSAccWayNo=C.AccWayNo 
    where   (@a1>=@Date1)  AND  (@a2<=@Date2)               //@Date1和Date2改成@a1和@a2
    RETURN我改成这样了,它显示语法出错啊,是SELECT附近
      

  35.   

    LS要注意用词啊,我是菜点,但你也不能侮辱人啊,,,你这不是让大家伙BS嘛,
      

  36.   

    存储过程还有错?
    把你修改后的贴出来看下。如果存储过程好用了,在后台代码里这样写运行存储过程的Sql语句。不用那个加参数的SqlCOMMAND对象,直接返回SqlDataReader对象或者用适配器填充DataSet
    打个比方
    string strsql = "exec web_CustSaleSearch ‘" + TextBox1.Text + "','" + TextBox2.Text + "'";
      

  37.   

    下午用DATAGRID和一个按钮把数据集里的所有表都显示了一遍,其中有一个表,也就是我这个网页的主表,一显示就会出现下面的乱码
    鏈嶅姟鍣ㄥ簲鐢ㄧ▼搴忎笉鍙敤 
    鎮ㄨ瘯鍥惧湪姝?Web 鏈嶅姟鍣ㄤ笂璁块棶鐨?Web 搴旂敤绋嬪簭褰撳墠涓嶅彲鐢ㄣ€傝鐐瑰嚮 Web 娴忚鍣ㄤ腑鐨勨€滃埛鏂扳€濇寜閽噸璇曟偍鐨勮姹傘€? 绠$悊鍛樻敞鎰忎簨椤? 璇﹁堪姝ょ壒瀹氳姹傚け璐ュ師鍥犵殑閿欒淇℃伅鍙湪 Web 鏈嶅姟鍣ㄧ殑绯荤粺浜嬩欢鏃ュ織涓壘鍒般€傝妫€鏌ユ鏃ュ織椤逛互鏌ユ槑瀵艰嚧璇ラ敊璇彂鐢熺殑鍘熷洜銆? 而其他的表全部都显示正常,
    我再用一个WEBGRID和一个按钮经过不带参数不条件的存储过程连接数据库,开始也同样显示上面的乱码,后来我把那个表去掉了,然后就显示成功了,,
    那为什么那个表显示乱码呢,是表的错误还是其他地方的错误呢
      

  38.   

    一个WEBGRID一个按钮,用存储过程,不带参数,不带条件,
    用SELECT * FORM 表名,运行时就会出现上面的那些乱码,而用
      SELECT TOP 200 * FROM 表名,就会正常显示数据,,,是什么原因呢
    那个表的确是非常大,有四万多条记录呢,