Example #1
0
        private JObject ExecuteCommand(SqlCommand cmd)
        {
            JObject result = new JObject();

            using (SqlConnection conn = new SqlConnection(_connectionString))
            {
                cmd.Connection = conn;
                try
                {
                    conn.Open();
                    SqlDataReader dbReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                    var           outpars  = GetOutputParameters(cmd.CommandText);
                    JArray        jData    = new JArray();
                    do
                    {
                        jData.AddtoSelf(DataReaderToJarray(dbReader));
                    } while (dbReader.NextResult());
                    result.Add("Data", jData);
                    dbReader.Close();//不先关闭SqlDataReader,获取不到返回参数
                    foreach (var item in outpars)
                    {
                        result.Add(item.Name, new JValue(cmd.Parameters[item.Name].Value));
                    }
                    if (result.Property("Result") == null)
                    {
                        result.Add("Result", Result.Success.ToJValue());
                    }
                    else if (result.Property("Result").Value.Type.Equals(JTokenType.Null))
                    {
                        result.Property("Result").Value = Result.Success.ToJValue();
                    }
                }
                catch (SqlException sqlerr)
                {
                    switch (sqlerr.Number)
                    {
                    case 547:       // ForeignKey Violation
                    case 2627:      //Unique Index/Constriant Violation
                    case 2601:      //Unique Index/Constriant Violation
                        result = new JObject {
                            { "Result", Result.Error.ToJValue() }, { "Message", "系统已存在该数据" }
                        };
                        break;

                    default:
                        result = new JObject {
                            { "Result", Result.Error.ToJValue() }, { "Message", sqlerr.ToString() }
                        };
                        break;
                    }
                }
                catch (Exception ex)
                {
                    result = new JObject {
                        { "Result", Result.Error.ToJValue() }, { "Message", ex.ToString() }
                    };
                    throw;
                }
            }
            return(result);
        }