我是利用dataApater自动配置的,在查询生成器中选择添加函数
然后选择好函数,在自动生成的语句中加入定义好的参数@key.SELECT
    站次, 
    经由站, 
    到站时刻, 
    发车时刻, 
    公里数, 
    天数
FROM
    checi8(@key) checi8下一步:结果提示错误不允许从数据类型 sql_variant 到 int 的隐性转换。请使用 CONVERT 函数来运行此查询。
我在程序中这样加参数的你看看对不对:
int key=(int) DataGrid1.DataKeys[DataGrid1.SelectedIndex];
sqlSelectCommand1.Parameters.Add("@key",key);sql函数语句:
ALTER FUNCTION checi8
                 ( @key int)
RETURNS table
AS
RETURN (
        SELECT *
FROM (SELECT 站次, 经由站, 
isnull(CONVERT(char(5), 到站时刻, 108), '起点') AS 到站时刻, 
isnull(CONVERT(char(5), 发车时刻, 108), '终点') AS 发车时刻, 
公里数, 天数
FROM message2
WHERE 车次ID =@key) tem
       )

解决方案 »

  1.   

    SqlInt32 key=(SqlInt32) DataGrid1.DataKeys[DataGrid1.SelectedIndex];
      

  2.   

    你不要使用这种方式来调用,直接使用存储过程!
    设定你运行的sql方式为调用sql的存储过程,就好。
      

  3.   

    参数你要是用c#的视图帮助生成的,那么参数他自动帮你加的,但参数的sql类型是有问题
    默认是sql_variant,你查找如下面
    sqlCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@key", System.Data.SqlDbType.variant));
    将System.Data.SqlDbType.variant
    改为System.Data.SqlDbType.Int;
    然后在调用sqlcommand时候先给parameter的value赋值
    sqlCommand1.Parameters["@Key"].Value=你从datagrid查询来的int值
    另外其实你这一句最好用存储过程来实现,为什么用函数呢?