没工作是小,面子是大啊,,,,,,,,,,,,
这么大岁数了还让老板炒,那真是太丢人了,太没脸见人了,,太郁闷了,太抓狂了,所以,请大家快帮我看看这段代码吧,,
生成后也显示出错,选完日期后按确定也不会显示出错,只是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];
}
}
}
[解决办法]
帮顶!
[解决办法]
return new DataManager().GetCheckCondition();
这个里面有返回数据集吗?
[解决办法]
极度怀疑字符串不是yyyy-MM-dd形式的,建议跟踪。
[解决办法]
根据楼主的叙述,以及从贴出来的异常消息分析,
问题应该出在 存储过程 的传入参数上!!!
楼主仔细查一下吧!
[解决办法]
异常详细信息: System.Data.SqlClient.SqlException: 从字符串转换为 datetime 时发生语法错误。
检查与时间有关的字段
[解决办法]
this.GetStoreProcedureParameters( "web_CustSaleSearch ",
new object[]{Date1,Date2)
你数据库表的2个字段如果是datetime类型的话 就不能这样传参了 你必须把 Date1,Date2转成datime类型。。从你的出错信息上看 估计你的数据库的字段为datetime类型,建议你再仔细看看。。
[解决办法]
异常详细信息: System.Data.SqlClient.SqlException: 从字符串转换为 datetime 时发生语法错误。
如上,异常信息很明显表明错误来自数据库,如果按楼主所言,sp 没有任何问题的话,
那唯一会出问题的地方就是 sp 的传入参数了,如果类型没问题的话,就是值有问题,
比如,楼主说“在存储过程里,参数的类型是VCHAR,,,那传递的TextBox1.Text不也是STRING类型吗?”,但是楼主是否检查了 TextBox1.Text 是否为 string.Empty 呢?或者 TextBox1.Text 中含有非法字符?当 sp 中对 TextBox1.Text 对应的参数进行 datetime 类型转换时就报错了。
其实能出问题的地方就那么几处,异常信息加耐心等于Debug!
先睡了,晚安!
明天一切都会好的!
[解决办法]
在编写代码完成的时候,LZ应该跟踪调试一下 看看问题出在哪里
[解决办法]
你数据库里的字段是datetime的吧。。。
而你传入的TextBox1.Text和TextBox2.Text都是字符串,类型肯定不一样
你先转换一下看看
[解决办法]
同意LS
[解决办法]
convert.todatetime(date1.text.trim())
要判断date1.text是不是正常的时间类型 可以加个正则表达式验证
[解决办法]
哎。。。
无语中
存储过程不用改
这里改成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();
}
[解决办法]
存储过程中的转换类型写的不对啊。
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。
[解决办法]
前提是你得保证代码里传入的参数是日期类型的string(字符串)。
[解决办法]
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)
这样呢?
[解决办法]
cast(@Date2 as datetime
右括号没有
------解决方案--------------------
恩,对啊,2处错误
修改成
cast(@Date2 as datetime)
和
A.CSDate> =@a1 and A.CSDate <=@a2
[解决办法]
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()));
[解决办法]
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附近
[解决办法]
存储过程还有错?
把你修改后的贴出来看下。
如果存储过程好用了,在后台代码里这样写运行存储过程的Sql语句。不用那个加参数的SqlCOMMAND对象,直接返回SqlDataReader对象或者用适配器填充DataSet
打个比方
string strsql = "exec web_CustSaleSearch ‘ " + TextBox1.Text + " ', ' " + TextBox2.Text + " ' ";