如题:
在我的程序中,需要用到如 “select 品名,数量,单价,单位 from 文件名”这样的语句,请问如何VARCHAR(20)类似这的字符放在语句中?现在关键我要指定的是: 数量与单价处为小数,是“select 品名,数量(Float),单价,单位 from 文件名”来写吗?谢谢大家。

解决方案 »

  1.   

    select 品名,convert(float,数量) from 文件名
      

  2.   


    DECLARE @sql varchar(500)='SELECT TOP '+ cast(@Size as varchar(20))+' * FROM [tb_UserFriend]'
    DECLARE @where varchar(300)
    -----SELECT TOP {0} * FROM [tb_UserFriend] WHERE [UserId]=@UserId and [ProcessResult]&@ProcessResult<>0 and (ID>SELECT MAX(Id) FROM (SELECT TOP {1} Id FROM [tb_UserFriend] WHERE [UserId]=@UserId and [ProcessResult]&@ProcessResult<>0 ORDER BY Id) AS T)) ORDER BY Idif @UserId<>-1
    set @where=' WHERE [UserId]='+cast(@UserId as varchar(20))
    else
    set @where=' WHERE 1=1'一个小例子
      

  3.   

    string strSql = "select 品名,规格,convert(float,库存),单位,convert(float,单价),编号,convert(float,收总量),convert(float,领总量),convert(float,均价),结转,convert(float,金额) ";在运行时提示:convert函数未定义?
      

  4.   

    convert是SQL支持的函数,不要把它放在”引号“里,用+ 号连接字符串
      

  5.   


    doubleu2005:您能帮我把上面的那段按您的意思,写一下吗?谢了。
      

  6.   

    select 品名,cast(数量 as decimal(18,2)),cast(单价 as decimal(18,2)),单位 from 文件名是要这个效果吗?
      

  7.   

    其实是这样的,我用 .CSV文件作为一个datagridview的数据库文件,有些情形让我很烦恼,比方说,当某字段第一条记录的为整数时,那么整列将自动变成了整形数据,当我需要增加一行(一条记录),而这条记录的相关数据又可能是小数,此时,在datagridview中不允许输入小数,只能是整数,所以我想直接强制它在加载时转为小数。
      

  8.   

    select 品名,cast 数量 as decimal(18,2),cast 单价 as decimal(18,2),单位 from 文件名
      

  9.   

    你们每次的回复,给我都是惊喜。     
     public DataSet 物料数据表格(string 文件路径, string 文件名, DataGridView dataGv)
            {
                DataSet DataSet = new DataSet();
                string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data ";
                strConn += "Source= " + 文件路径;
                strConn += ";Extended Properties=\"text;HDR=Yes;FMT=Delimited\";";
                OleDbConnection objConn = new OleDbConnection(strConn);          ///  try
              //  {
                    //// string strSql = "select *  ";
               //// string strSql = "select 品名,规格, cast(数量 as decimal(18,2)),单位,CONVERT(float,单价),编号,CONVERT(float,收总量),CONVERT(float,领总量),CONVERT(float,均价),结转,CONVERT(float,金额) ";
               /// string strSql = "select 品名,规格,cast('库存' as decimal(15,2)),单位,cast('单价' as decimal(15,2)),编号,cast('收总量' as decimal(15,2)),cast('领总量' as decimal(15,2)),cast('均价' as decimal(15,2)),结转,cast('金额' as decimal(15,2))";
                string strSql = "select 品名,规格, cast 库存 as decimal(18,2) ";
                   //// string strSql = "select 品名,规格,库存,单位,单价,编号,收总量,领总量,均价,结转,金额";
                    strSql += " from [" + 文件名 + "]";
                    OleDbDataAdapter OleDbDataAdapter = new OleDbDataAdapter(strSql, objConn);
                    OleDbDataAdapter.Fill(DataSet, "TableName");
                    DataSet.Tables["TableName"].Rows.Clear();                                                                   //清除原有的数据,避免重复
                    OleDbDataAdapter.Fill(DataSet, "TableName");                dataGv.DataSource = DataSet.Tables["TableName"];
               /// }
              ///  catch
                { }//throw; }            objConn.Close();
                DataSet.Dispose();            return DataSet;
            }这是我程序中的代码,运行时,会出现"IErrorInfo.GetDescription 因 E_FAIL(0x80004005) 而失败。"
      

  10.   

    在 OleDbDataAdapter.Fill(DataSet, "TableName");
    这个位置出现的那个错误提示。烦,高手们继续出招吧。
      

  11.   

    你把代码整理一下发个清洁的版本过来我帮你看看,另外你fill两次是为什么
    OleDbDataAdapter.Fill(DataSet, "TableName");
      

  12.   

            public DataSet 物料数据表格(string 文件路径, string 文件名, DataGridView dataGv)
            {
                DataSet DataSet = new DataSet();
                string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data ";
                strConn += "Source= " + 文件路径;
                strConn += ";Extended Properties=\"text;HDR=Yes;FMT=Delimited\";";
                OleDbConnection objConn = new OleDbConnection(strConn);            /// string strSql = "select *  ";
                /// string strSql = "select 品名,规格,库存,单位,单价,编号,收总量,领总量,均价,结转,金额";                       //其中:库存,单价,收总量,领总量,均价,金额 全部转为小数
                 string strSql = "select 品名,规格, cast 库存 as decimal(18,2) ";
                    strSql += " from [" + 文件名 + "]";
                    OleDbDataAdapter OleDbDataAdapter = new OleDbDataAdapter(strSql, objConn);
                    OleDbDataAdapter.Fill(DataSet, "TableName");
                    dataGv.DataSource = DataSet.Tables["TableName"];
                objConn.Close();
                DataSet.Dispose();            return DataSet;
            }
      

  13.   

    string strSql = "select * "; 可正常运行
    string strSql = "select 品名,规格, cast 库存 as decimal(18,2) ";  有错误提示
    谢谢。 
      

  14.   

    strSql = "select 品名,规格, cast 库存 as decimal(18,2) "; 应该这样写strSql = "select 品名,规格, cast (库存 as decimal(18,2)) as 库存 "; 
      

  15.   

    改过之后,运行时,还是会出现"IErrorInfo.GetDescription 因 E_FAIL(0x80004005) 而失败。"
    烦呀!!
      

  16.   

    string strSql = "select * "; 可正常运行
    看错误提示,好象是字段关键字被屏蔽了,不知怎么写了,
    这个问题一直困了我两年。
      

  17.   

    晕,OLEDB不支持cast和convert,
    你取出来之后再转格式吧,在datagridview中设置格式
      

  18.   

    如果真的不支持也只能放弃了,但在datagridview也设置过,无效
      

  19.   

    主要就是使用sql的方法 cast ( 字段名  as 字段类型 )