数据层用到的几个方法。
private static void PrepareCommand(IDbConnection conn, IDbCommand cmd, string SqlCommandText, IDbTransaction trans, IDbDataParameter[] SqlParameters)
{
try
{
if (conn.State != ConnectionState.Open)
{
conn.Open();
}
cmd.Connection = conn;
cmd.CommandText = SqlCommandText;
cmd.CommandType = CommandType.Text;
if (trans != null)
{
cmd.Transaction = trans;
}
if (SqlParameters != null)
{
if (IsStoredProcedure(SqlCommandText))
{
cmd.CommandType = CommandType.StoredProcedure;
}
foreach (IDbDataParameter parameter in SqlParameters)
{
if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) && (parameter.Value == null))
{
parameter.Value = DBNull.Value;
}
cmd.Parameters.Add(parameter);
}
}
}
catch (Exception ex)
{
CustomErrors.ErrFlag = "database";
CustomErrors.ErrDescription = ex.Message;
}
}
private static bool IsStoredProcedure(string SqlCommandText)
{
bool result = true;
string[] operate = { "select ", "insert ", "delete ", "update " };
string lowerText = SqlCommandText.ToLower();
foreach (string str in operate)
{
f (lowerText.Contains(str))
{
result = false;
break;
}
}
return result;
}
private static DataTable DataReaderToDataTable(IDataReader reader)
{
DataTable tab = null;
try
{
tab = new DataTable();
int len = reader.FieldCount;
for (int i = 0; i < len; i++)
{
tab.Columns.Add(reader.GetName(i), reader.GetFieldType(i));
}
tab.BeginLoadData();
object[] objArr = new object[len];
while (reader.Read())
{
reader.GetValues(objArr);
tab.LoadDataRow(objArr, true);
}
reader.Close();
tab.EndLoadData();
}
catch (Exception ex)
{
CustomErrors.ErrFlag = "database";
CustomErrors.ErrDescription = ex.Message;
}
return tab;
}