简体   繁体   English

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

[英]Stored Procedure for get using Data Table ASP.Net WebAPI

can Anyone help me to correct this code.. 任何人都可以帮助我更正此代码。

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;
                }

            }

i have changed this code to handle the null reference Exception. 我已更改此代码以处理空引用异常。

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;

-----------------------------------------------This is the Exception After changed my code------- -----------------------------------------------这是异常更改我的代码后--------

An exception of type 'System.InvalidCastException' occurred in BLL.dll but was not handled in user code BLL.dll中发生类型'System.InvalidCastException'的异常,但未在用户代码中处理

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

This works perfectly. 这很完美。 Thanks everyone for your support and encouragements. 感谢大家的支持和鼓励。

 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;
            }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM