我建了一个存储过程:
create procedure pro
@ID int,@voteItem varchar(20) output
as
set nocount on
declare @voteNum int
select @voteItem=voteItem,@voteItem=voteItem
from voteDetails
where voteId=@ID
return @voteNum但是在用ASP.NET调用的时候出现错误(在SQLSERVER中能顺利执行)
System.ArgumentException: 不存在从对象类型 System.RuntimeType 到已知的托管提供程序本机类型的映射。

解决方案 »

  1.   

    下面是程序代码:
    using System;
    using System.Data;
    using System.Data.SqlClient;
    using System.Data.Common;
    using System.Runtime;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;public partial class _Default : System.Web.UI.Page 
    {
        protected void Page_Load(object sender, EventArgs e)
        {
           
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            string strconn = "Data Source=.;Initial Catalog=vote;User ID=sa;Password=sa";
            SqlConnection conn = new SqlConnection();
            conn.ConnectionString = strconn;
            string sqltext = "pro";
            SqlCommand sqlcmd = new SqlCommand(sqltext, conn);
            sqlcmd.CommandType = CommandType.StoredProcedure;
        SqlParameter voteItem = new SqlParameter("@voteItem", SqlDbType.VarChar, 20);
            voteItem.Direction = ParameterDirection.Output;
          sqlcmd.Parameters.Add("@ID", typeof(int));
         sqlcmd.Parameters.Add(voteItem);
       //sqlcmd.Parameters.Add("@voteNum",typeof(int));
          sqlcmd.Parameters["@ID"].Value = this.TextBox1.Text;
         // sqlcmd.Parameters["@voteNum"].Direction = ParameterDirection.ReturnValue;
            conn.Open();
            sqlcmd.ExecuteScalar();
            
            Label1.Text = sqlcmd.Parameters["@voteItem"].Value.ToString();
          // Label2.Text = sqlcmd.Parameters["@voteNum"].Value.ToString();
            conn.Close();    }
    }
    如果把有关返回参数的三条语句删除就可以顺利执行,
    //sqlcmd.Parameters.Add("@voteNum",typeof(int));// sqlcmd.Parameters["@voteNum"].Direction = ParameterDirection.ReturnValue;// Label2.Text = sqlcmd.Parameters["@voteNum"].Value.ToString();
      

  2.   

    sqlcmd.Parameters.Add( "@voteNum", SqlDbType.Int ).Direction = ParameterDirection.Output;
      

  3.   

    呵呵,FCPPS(风吹屁屁爽) ( ) 信誉:100 
    你是对的,,谢谢了,,为什么会这样呢,SqlDbType.Int 和typeof(int)有什么区别啊,我时照书上做的啊,书害人。