使用数据表ASP.Net WebAPI的存储过程

时间:2018-10-15 11:16:14

标签: c# asp.net-mvc stored-procedures datatable

任何人都可以帮助我更正此代码。

public static DataTable getCompartmentList(int module, string compID, string compDesc, string compType, string equipMake, string equipModel, string compMake, int compSize)
            {
                string cnnString = System.Configuration.ConfigurationManager.ConnectionStrings["TTDALConnection"].ConnectionString;
                DataTable dt = null;

                try
                {
                    SqlConnection cnn = new SqlConnection(cnnString);
                    SqlCommand cmd = new SqlCommand("spGetCompartmentsList", cnn);
                    cmd.CommandType = System.Data.CommandType.StoredProcedure;
                    cmd.CommandText = "spGetCompartmentsList";

                    cmd.Parameters.Add(new SqlParameter("@progid", module));

                    cmd.Parameters.Add(new SqlParameter("@compId", (object)compID ?? DBNull.Value));
                    cmd.Parameters.Add(new SqlParameter("@compDesc", (object)compDesc ?? DBNull.Value));
                    cmd.Parameters.Add(new SqlParameter("@compType", (object)compType ?? DBNull.Value));
                    cmd.Parameters.Add(new SqlParameter("@equipMake", (object)equipMake ?? DBNull.Value));
                    cmd.Parameters.Add(new SqlParameter("@equipModel", (object)equipModel ?? DBNull.Value));
                    cmd.Parameters.Add(new SqlParameter("@compMake", (object)compMake ?? DBNull.Value));
                    cmd.Parameters.Add(new SqlParameter("@compSize", (object)compSize ?? DBNull.Value));

                    cnn.Open();
                    SqlDataReader dr = cmd.ExecuteReader();
                    dt.Load(dr);
                    return dt;
                }
                catch
                {
                    throw;
                }

            }

我已更改此代码以处理空引用异常。

cmd.Parameters.Add(new SqlParameter("@progid", SqlDbType.Int).Value =  module);  

                if(compID == null)
                    cmd.Parameters.Add(new SqlParameter("@compId", SqlDbType.VarChar).Value = DBNull.Value);
                else
                    cmd.Parameters.Add(new SqlParameter("@compId", SqlDbType.VarChar).Value = compID);

                if (compDesc == null)
                    cmd.Parameters.Add(new SqlParameter("@compDesc", SqlDbType.VarChar).Value = DBNull.Value);
                else
                    cmd.Parameters.Add(new SqlParameter("@compDesc", SqlDbType.VarChar).Value = compDesc);

                if (compType == null)
                    cmd.Parameters.Add(new SqlParameter("@compType", SqlDbType.VarChar).Value = DBNull.Value);
                else
                    cmd.Parameters.Add(new SqlParameter("@compType", SqlDbType.VarChar).Value = compType);

                if (equipMake == null)
                    cmd.Parameters.Add(new SqlParameter("@equipMake", SqlDbType.VarChar).Value = DBNull.Value);
                else
                    cmd.Parameters.Add(new SqlParameter("@equipMake", SqlDbType.VarChar).Value = equipMake);

                if (equipModel == null)
                    cmd.Parameters.Add(new SqlParameter("@equipModel", SqlDbType.VarChar).Value = DBNull.Value);
                else
                    cmd.Parameters.Add(new SqlParameter("@equipModel", SqlDbType.VarChar).Value = equipModel);

                if (compMake == null)
                    cmd.Parameters.Add(new SqlParameter("@compMake", SqlDbType.VarChar).Value = DBNull.Value);
                else
                    cmd.Parameters.Add(new SqlParameter("@compMake", SqlDbType.VarChar).Value = compMake);
                    cmd.Parameters.Add(new SqlParameter("@compSize", SqlDbType.VarChar).Value = compSize);


                cnn.Open();
                SqlDataReader dr = cmd.ExecuteReader();
                dt.Load(dr);
                return dt;

--------------------------------------------------这是更改我的代码后的异常-------

BLL.dll中发生了'System.InvalidCastException'类型的异常,但未在用户代码中处理

Additional information: The SqlParameterCollection only accepts non-null SqlParameter type objects, not Int32 objects.

1 个答案:

答案 0 :(得分:0)

这很好用。感谢大家的支持和鼓励。

 public static DataTable getCompartmentList(int module, string compID, string compDesc, string compType, string equipMake, string equipModel, string compMake, int compSize)
            {
                string cnnString = System.Configuration.ConfigurationManager.ConnectionStrings["TTDALConnection"].ConnectionString;
                DataTable dt = new DataTable();
                using (SqlConnection con = new SqlConnection(cnnString))
                {
                    con.Open();
                    using (SqlCommand cmd = new SqlCommand())
                    {
                        cmd.Connection = con;
                        cmd.CommandType = CommandType.StoredProcedure;
                        cmd.CommandText = "spGetCompartmentsList";


                        cmd.Parameters.Add(new SqlParameter("@progid", module));
                        cmd.Parameters.Add(new SqlParameter("@compId", SqlDbType.VarChar));


                        if (compID == null)
                            cmd.Parameters["@compId"].Value = DBNull.Value;
                        else
                            cmd.Parameters["@compId"].Value = compID;

                        cmd.Parameters.Add(new SqlParameter("@compDesc", SqlDbType.VarChar));
                        if (compDesc == null)
                            cmd.Parameters["@compDesc"].Value = DBNull.Value;
                        else
                            cmd.Parameters["@compDesc"].Value = compDesc;

                        cmd.Parameters.Add(new SqlParameter("@compType", SqlDbType.VarChar));
                        if (compType == null)
                            cmd.Parameters["@compType"].Value = DBNull.Value;
                        else
                            cmd.Parameters["@compType"].Value = compType;

                        cmd.Parameters.Add(new SqlParameter("@equipMake", SqlDbType.VarChar));
                        if (equipMake == null)
                            cmd.Parameters["@equipMake"].Value = DBNull.Value;
                        else
                            cmd.Parameters["@equipMake"].Value = equipMake;

                        cmd.Parameters.Add(new SqlParameter("@equipModel", SqlDbType.VarChar));
                        if (equipModel == null)
                            cmd.Parameters["@equipModel"].Value = DBNull.Value;
                        else
                            cmd.Parameters["@equipModel"].Value = equipModel;

                        cmd.Parameters.Add(new SqlParameter("@compMake", SqlDbType.VarChar));
                        if (compMake == null)
                            cmd.Parameters["@compMake"].Value = DBNull.Value;
                        else
                            cmd.Parameters["@compMake"].Value = compMake;

                        cmd.Parameters.Add(new SqlParameter("@compSize", compSize));
                        using (SqlDataAdapter da = new SqlDataAdapter(cmd))
                        {
                            da.Fill(dt);
                        }
                    }
                }
                return dt;
            }