请高手们指点,要急死了!
其中:qydate和jcdate对应的字段类型是日期型insert into water_dj values('" + StoreID + "','" + JH + "','" + Kh + "',to_date('" + qydate + "','yyyy-mm-dd'),to_date('" + jcdate + "','yyyy-mm-dd')," + qyl + "," + coc + "," + coz + "," + hcoc + "," + hcoz + "," + clc + "," + clz + "," + cac + "," + caz + "," + mgc + "," + mgz + "," + soc + "," + soz + "," + Convert.ToDecimal(khd) + "," + Convert.ToDecimal(yd) + "," + Convert.ToDecimal(col) + "," + Convert.ToDecimal(qw) + "," + Convert.ToDecimal(bz) + ")我将这段语句换成相应的数据,在sql*plus worksheet中执行正常,我不明白为什么在vs2005中调试时,就是出现“数据库错误,错误原因:输入字符串的格式不正确。将一个字符串转换成为datatime时,应先分析该字符串以获取日期,然后将变量放置到datatime对象中

解决方案 »

  1.   

    to_date('2010-07-27','yyyy-MM-dd')
    你里面加这么多+干什么?...
      

  2.   

    to_date这个函数是怎么写的,你的传送实参时感觉挺奇怪的
      

  3.   

    这个是后台代码啊?里面的+号都是用来连接变量的啊?
    protected void Button1_Click(object sender, EventArgs e)
        {
            string name = Session["UserName"].ToString();
            string StoreID = this.Label1.Text.Trim();
            string JH = this.DDLsearch.SelectedValue.ToString();
            string Kh = Convert.ToString(HyDb.ReturnSQL("select kh from userinfo where username='" + name + "'"));
            string qydate = this.txtqydate.Text.Trim();
            string jcdate = this.txtjcdate.Text.Trim();
            string qyl = this.txtqyl.Text.Trim();
            string coc = this.Txtcochu.Text.Trim();
            string coz = this.Txtcozhong.Text.Trim();
            string hcoc = this.Txthcochu.Text.Trim();
            string hcoz = this.Txthcozhong.Text.Trim();
            string clc = this.Txtclchu.Text.Trim();
            string clz = this.Txtclzhong.Text.Trim();
            string cac = this.Txtcachu.Text.Trim();
            string caz = this.Txtcazhong.Text.Trim();
            string mgc = this.Txtmgchu.Text.Trim();
            string mgz = this.Txtmgzhong.Text.Trim();
            string soc = this.Txtsochu.Text.Trim();
            string soz = this.Txtsozhong.Text.Trim();
            string khd = this.Txtkhd.Text.Trim();
            string yd = this.Txtyd.Text.Trim();
            string col = this.Txtcolor.Text.Trim();
            string qw = this.Txtqw.Text.Trim();
            string bz = this.Txtbz.Text.Trim();
            //try
            //{
                //HyDb.NoreturnSql("insert into water_dj values('" + StoreID + "','" + JH + "','" + Kh + "','" + qydate + "','" + jcdate + "'," + qyl + "," + coc + "," + coz + "," + hcoc + "," + hcoz + "," + clc + "," + clz + "," + cac + "," + caz + "," + mgc + "," + mgz + "," + soc + "," + soz + "," + Convert.ToDecimal(khd) + "," + Convert.ToDecimal(yd) + "," + Convert.ToDecimal(col) + "," + Convert.ToDecimal(qw) + "," + Convert.ToDecimal(bz) + ")");
                HyDb.NoreturnSql("insert into water_dj values('" + StoreID + "','" + JH + "','" + Kh + "',to_date('" + qydate + "','yyyy-mm-dd'),to_date('" + jcdate + "','yyyy-mm-dd')," + qyl + "," + coc + "," + coz + "," + hcoc + "," + hcoz + "," + clc + "," + clz + "," + cac + "," + caz + "," + mgc + "," + mgz + "," + soc + "," + soz + "," + Convert.ToDecimal(khd) + "," + Convert.ToDecimal(yd) + "," + Convert.ToDecimal(col) + "," + Convert.ToDecimal(qw) + "," + Convert.ToDecimal(bz) + ")");            HyDb.NoreturnSql("commit");
                AutoID();
            //}
            //catch (Exception ex)
            //{
            //    Response.Write("数据库错误,错误原因:" + ex.Message);
            //    Response.End();
            //}
            this.clear();
        }
      

  4.   

    把这句插入语句放到sql*plus worksheet中,把里的变量都换成要录入的数据,正常插入了,可是在VS2005里一调试就出错,我实在是找不出错误在哪里!望高手们指点啊!
      

  5.   

    你这样
    定义string strsql="insert into water_dj values('" + StoreID + "','" + JH + "','" + Kh + "','" + qydate + "','" + jcdate + "'," + qyl + "," + coc + "," + coz + "," + hcoc + "," + hcoz + "," + clc + "," + clz + "," + cac + "," + caz + "," + mgc + "," + mgz + "," + soc + "," + soz + "," + Convert.ToDecimal(khd) + "," + Convert.ToDecimal(yd) + "," + Convert.ToDecimal(col) + "," + Convert.ToDecimal(qw) + "," + Convert.ToDecimal(bz) + ")"
    断点跟踪,取strsql的值,在oracle里执行,看哪出错
      

  6.   

    报错时,我看了里面的值qydate是2010-07-27,jcdate是2010-07-28
      

  7.   

    最夸张的是,我刚才又建了一个表,然后把qydate,jcdate两个字段改成了字符型的,结果一调试,它出的错误还是这个!究竟是怎么回事儿呢?真着急啊!
      

  8.   

    你的错误不是很明显吗?——楼上都不看重点的。  你输出qydate ,jcdate 的字符串形式看看,用qydate.ToString()即可查看,显然,如果这两个变量在C#中是日期型的话,在SQL语句拼接时,它们都会自动从日期型转换为字符串的,这时就调用了默认的ToString()方法在转换,得到的日期自然不是'yyyy-MM-dd'样式的了,你这样to_date肯定出错了。
      处理方法很简单,你在C#中拼接SQL语句时,先ToString('yyyy-MM-dd')转换下,然后拼接到SQL语句里即可,同理,你后面的Convert.ToDecimal转换都是多余的,因为最终是会自动调用ToString转换到字符串来拼接这些SQL片段的。
      

  9.   

    你定义qydate和jcdate的时候都是string型的啊
    直接在赋值的时候就转成DATETIME型的试试行不
      

  10.   

    用String.Format()....可能看上去会好一点...你这样字符串连接的话,不容易找出错误 ,
    string sID = "123";
    string sName = "aaa";
    int iAge = 15;
    String.Format("insert into table {ID, name, Age} values {'{0}', '{1}', {2}}", sID, sName, iAge);
      

  11.   

    .......不明白
    string qydate = this.txtqydate.Text.Trim();
      string jcdate = this.txtjcdate.Text.Trim();
    这样也能变成不是'yyyy-MM-dd'的样式????......
      

  12.   

    还有一种可能,是HyDb的问题,显然你的错误信息不是Oracle的,那么我想是不是你用的不是Oracle的连接类,如果是ODBC的呢?我试过会不会提这样的错误,如果非Oracle的连接类,Oracle的函数将不可用,类似to_date的函数将不可用哦。
      

  13.   


    DateTime qydate=Convert.ToDateTime(this.txtqydate.Text.Trim());
      

  14.   

    在这个语句的地方设个断点,执行到这把字符串拼接后的语句拿到plsdeveloper中调试一下,然后看看报什么错误就行了。
      

  15.   

     protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
             {
                 ……
                txtqydate.Text = Convert.ToString(DateTime.Now.AddDays(-1).ToString().Substring(0, 10));
                txtjcdate.Text = Convert.ToString(DateTime.Now.ToString().Substring(0, 10));
               }
            }已经将变量转换成字符型的了啊?而且将textbox设成了只读!为了方便用户录入,而且要求这两个日期必须是当天和前一天的!
      

  16.   

    试了DateTime qydate=Convert.ToDateTime(this.txtqydate.Text.Trim());还是不行,出错出的是一样的!
      

  17.   

    你这是走弯路,根本没必要试,SQL语句拼接不能用DataTime类型,除非是参数化,但是你的HyDb类是如何参数化我不清楚,你还是用标准的OracleCommand来做吧,偷懒只会给自己找麻烦。
      

  18.   

    可以在vs2005中进行单步跟踪,你可以把sql语句赋值给一个字符串变量,然后运行时看这个变量的值跟你在pl/sql中应该只是多了一个双引号。如果有不一样的地方,你就知道那个sql语句字符串应该怎么改了
      

  19.   

    1、检察HyDb.NoreturnSql()HyDb.NoreturnSql("commit");AutoID();的写法是否有误;另外看数据库连接语句是否正确
    2、设置断点取sql语句直接在orcl上运行,看报什么错
      

  20.   

    转换为日期类型是不行的,你vs2005环境中形成的是pl/sql语句的字符串,而不是真正的sql语句,所以 Convert.ToDecimal(bz)应变为有双引号的,这样这个字符串在转换后就变成sql语句中的日期转换了,不然你的语句是不能通过编译的,其实编译错误还是比较好解决的,因为你的程序根本不能运行
      

  21.   

    看你那一堆加号就构乱了,何不用OracleCommand + OracleParameter 的方式? 可读性好一些。
      

  22.   

    Single r;
      string t = textBox1.Text;
      int space = t.IndexOf(" ");
      string s1 = t.Substring(2);
      char op = Convert.ToChar(t.Substring(space + 1, 1));
      string s2 = t.Substring(3);
      Single arg1 = Convert.ToSingle(s1);
      Single arg2 = Convert.ToSingle(s2);
      总是提示输入字符串的格式不正确!!!帮忙解决下