我运行getspdt方法的时候会报错:System.Data.SqlClient.SqlInternalConnectionTds 无法强制转换成System.Data.SqlClient.SqlInternalConnectionSmi存储过程都参数都是varchar,在数据库里面执行没问题。
SqlConnection scn = new SqlConnection();//连接设定
    Access acc = new Access();   //操作基础类    string beginDate = "";
    string enddate = "";
    string txtUserid = "";    /// <summary>
    /// 国际惯例取字符串
    /// </summary>
    ///<param name="scn">连接的SqlDataConnection</param>
    private void getscnstr(SqlConnection Scn)
    {
        if (scn.ConnectionString == "")
        {
            Scn.ConnectionString = acc.ScnConnStr;
        }
    }    /// <summary>
    /// 国际惯例芝麻开门
    /// </summary>
    /// <param name="scn">连接的SqlDataConnection</param>
    private void OpenConn(SqlConnection Scn)
    {
        if (scn.State == ConnectionState.Closed)
        {
            Scn.Open();
        }
    }    private void MessageBoxShow(String Errstr)//信息提示
    {
        Response.Write("<scr" + "ipt> alert('" + Errstr + "') </scr" + "ipt>");
    } private DataTable GetSpdt(out DataTable spdt,string seUserid,string BeginDate,string Enddate)
    {
        try
        {
            spdt = null;
            string Userid = (string)(Session["LoginUser"]);
            string UserAuthority = (string)(Session["Authority"]);            getscnstr(scn);
            OpenConn(scn);            string sqlstr2 = "SELECT * FROM uvw_IsPrincipal WHERE FnAME='" + Userid + "' AND IsPrincipal=1 ";
            DataTable dt2 = acc.GetSereachData(scn, sqlstr2);
            if (dt2.Rows.Count == 0)
            {
                    seUserid = Userid;
            }            getscnstr(scn);
            OpenConn(scn);
            SqlCommand cmd = new SqlCommand();
            cmd.CommandText = "usp_DalayReoprt";
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Connection = scn;            cmd.Parameters.Add("@PositionCode", SqlDbType.VarChar);
            cmd.Parameters["@PositionCode"].Value = UserAuthority;
            cmd.Parameters.Add("@Code", SqlDbType.VarChar);
            cmd.Parameters["@Code"].Value = "'%"+seUserid+"%'";
            cmd.Parameters.Add("@BeingDate", SqlDbType.VarChar);
            cmd.Parameters["@BeingDate"].Value = "'"+BeginDate+"'";
            cmd.Parameters.Add("@EndDate", SqlDbType.VarChar);
            cmd.Parameters["@EndDate"].Value = "'" + Enddate + "'";            SqlDataAdapter sda = new SqlDataAdapter(cmd);
            //DataTable DDT = new DataTable();
            //DataSet ds=new DataSet();
            sda.Fill(spdt);
            //spdt = ds.Tables[0];
            return  spdt;
        }
        catch (Exception ex)
        {
            MessageBoxShow(ex.ToString());
            spdt = null;
            return spdt;
        }        
    }

解决方案 »

  1.   

    存储过程都是varchar,数据库表里的字段呢,好像有日期字段,检查一下你传的值
      

  2.   

    我的值是yyyy-mm-dd的,可以自动转化的吧?
      

  3.   

    值是textbox的字符串,yyyy-mm-dd的标准格式的
      

  4.   

     cmd.CommandType = CommandType.StoredProcedure;
                cmd.Connection = scn;
    运行到这一句就报这个错了
    但是前面用SQL语句调用是没有问题的,同一相连接。
      

  5.   


     private void getscnstr(SqlConnection Scn)
        {
            if (scn.ConnectionString == "")
            {
                Scn.ConnectionString = acc.ScnConnStr;
            }
        }scn与Scn注意