要实现功能很简单,就是根据编号从名单表中查出姓名:
CREATE PROCEDURE dbo.getName
(
@bianhao varchar(10),
@name varchar(10) output
)
AS
SELECT 姓名
FROM 名单表
where 编号 =@bianhao
RETURN
GO用查询分析器执行正常:
declare @bh varchar(10)
declare @name varchar(10)
set @bh='101006'
exec getname @bh,@name output但用下面的语加调用时出错(用MessageBox显示是空的,但表中确实存在这个编号和姓名):未处理 System.InvalidCastException
Message="无法将类型为“System.DBNull”的对象强制转换为类型“System.String”。"
当从一个数字执行强制转换时,值必须是一个小于无限大的数字。 SqlCommand myComm1 = new SqlCommand("getName", myConn);
myComm1.CommandType = CommandType.StoredProcedure;
myComm1.Parameters.AddWithValue("@bianhao",bianhao);
SqlParameter name= new SqlParameter("@name", SqlDbType.VarChar, 10);
name.Direction = ParameterDirection.Output;
myComm1.Parameters.Add(name);
myComm1.ExecuteNonQuery();
MessageBox.Show(name.Value.ToString());
return (string)name.Value;
CREATE PROCEDURE dbo.getName
(
@bianhao varchar(10),
@name varchar(10) output
)
AS
SELECT 姓名
FROM 名单表
where 编号 =@bianhao
RETURN
GO用查询分析器执行正常:
declare @bh varchar(10)
declare @name varchar(10)
set @bh='101006'
exec getname @bh,@name output但用下面的语加调用时出错(用MessageBox显示是空的,但表中确实存在这个编号和姓名):未处理 System.InvalidCastException
Message="无法将类型为“System.DBNull”的对象强制转换为类型“System.String”。"
当从一个数字执行强制转换时,值必须是一个小于无限大的数字。 SqlCommand myComm1 = new SqlCommand("getName", myConn);
myComm1.CommandType = CommandType.StoredProcedure;
myComm1.Parameters.AddWithValue("@bianhao",bianhao);
SqlParameter name= new SqlParameter("@name", SqlDbType.VarChar, 10);
name.Direction = ParameterDirection.Output;
myComm1.Parameters.Add(name);
myComm1.ExecuteNonQuery();
MessageBox.Show(name.Value.ToString());
return (string)name.Value;
SELECT @name = 姓名
FROM 名单表
where 编号 =@bianhao
SELECT 姓名
FROM 名单表
where 编号 =@bianhao然后用
string strName = myComm1.ExecuteScalar().ToString();