在做一个简单的电子商务后台。
需要做很多的新建、编辑、删除的页面。比如产品的、类别的、人员权限的。
就是在不停的拖from,然后写sql。
有没有什么简洁点的方法?
最好请高手给个例子我研究一下。谢谢。
需要做很多的新建、编辑、删除的页面。比如产品的、类别的、人员权限的。
就是在不停的拖from,然后写sql。
有没有什么简洁点的方法?
最好请高手给个例子我研究一下。谢谢。
解决方案 »
- 如果获取当前程序卡在什么时候
- 已经打开了多个浏览器窗口,分别显示不同网页内容,怎样定时逐个显示每个浏览器窗口
- 关于正则的问题~~在线等解答~~星期六加班的人伤不起阿~~~
- 关于DataGridView中某一列所有数(float)之和怎么做?急用…
- 一段简单的代码出错了,请各位大侠指点一下!
- C#替换WORD中字符为图片,求助
- C#题,请赐教
- 如何获取本机IIS的数据流量?
- 如何访问在DataSet 中使用 row.delete方法标志为 deleted的数据
- C#程序员大集合......C#程序mm和蟀哥们留下你们的MSN吧。大家共同探讨交流。来者皆有分
- 一个头痛的问题!在线等待!!!!
- C# 得到一个存储路径
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;namespace Gree.Common
{
public class SqlExec
{
#region ExecCommand 直接运行sql命令 public static int ExecCommand(string CommandText, string CommandConnString)
{
int returnValue = 0; SqlConnection myconn = new SqlConnection(CommandConnString);
SqlCommand mycmd = new SqlCommand(CommandText, myconn);
try
{
myconn.Open();
returnValue = mycmd.ExecuteNonQuery();
myconn.Close();
}
catch (Exception ex)
{
throw ex;
}
return returnValue;
} #endregion #region ReturnDataTable 填充数据表 public static void FillDataTable(string CommandText, DataTable returnTable, string CommandConnString)
{ SqlConnection myconn = new SqlConnection(CommandConnString);
SqlDataAdapter mydp = new SqlDataAdapter(CommandText, myconn);
try
{
myconn.Open();
mydp.Fill(returnTable);
myconn.Close();
}
catch (Exception ex)
{
throw ex;
}
} #endregion #region returnDataTable 返回数据表 public static DataTable returnDataTable(string CommandText, string CommandConnString)
{
DataTable mytb = new DataTable();
SqlConnection myconn = new SqlConnection(CommandConnString);
SqlDataAdapter mydp = new SqlDataAdapter(CommandText, myconn);
try
{
myconn.Open();
mydp.Fill(mytb);
myconn.Close();
}
catch (Exception ex)
{
throw ex;
}
return mytb;
} #endregion #region returnDataSet 返回数据集 public static DataSet returnDataSet(string CommandText, string CommandConnString)
{
DataSet mytb = new DataSet();
SqlConnection myconn = new SqlConnection(CommandConnString);
SqlDataAdapter mydp = new SqlDataAdapter(CommandText, myconn);
try
{
myconn.Open();
mydp.Fill(mytb);
myconn.Close();
}
catch (Exception ex)
{
//ex.ToString();
throw ex;
}
return mytb;
} #endregion #region ReturnDataSet 填充数据集 public static void FillDataTable(string CommandText, DataSet ReturnDataSet, string CommandConnString)
{
SqlConnection myconn = new SqlConnection(CommandConnString);
SqlDataAdapter mydp = new SqlDataAdapter(CommandText, myconn);
try
{
myconn.Open();
mydp.Fill(ReturnDataSet);
myconn.Close();
}
catch (Exception ex)
{
throw ex;
}
} #endregion #region 运行存储过程返回数据表 public static DataTable ExecProcRetutnDt(string ProcName, string ConnString, params SqlParameter[] commandParameters)
{
DataTable returnValue = new DataTable();
SqlConnection myconn = new SqlConnection(ConnString);
SqlCommand myCmd = new SqlCommand(ProcName, myconn);
myCmd.CommandType = CommandType.StoredProcedure;
if ((commandParameters.Length > 0) && (commandParameters != null))
{
for (int i = 0; i < commandParameters.Length; i++)
{
myCmd.Parameters.Add(commandParameters[i]);
}
}
SqlDataAdapter mydp = new SqlDataAdapter(myCmd);
try
{
myconn.Open();
mydp.Fill(returnValue);
myconn.Close();
}
catch (SqlException ex)
{
ex.ToString();
}
return returnValue;
} #endregion #region 运行存储过程返回影响行数 public static int ExecProcRetrunInt(string ProcName, string ConnString, params SqlParameter[] commandParameters)
{
int returnValue = 0;
SqlConnection myconn = new SqlConnection(ConnString);
SqlCommand myCmd = new SqlCommand(ProcName, myconn);
myCmd.CommandType = CommandType.StoredProcedure;
if ((commandParameters.Length > 0) && (commandParameters != null))
{
for (int i = 0; i < commandParameters.Length; i++)
{
myCmd.Parameters.Add(commandParameters[i]);
}
}
try
{
myconn.Open();
returnValue = myCmd.ExecuteNonQuery();
myconn.Close();
}
catch (SqlException ex)
{
ex.ToString();
}
return returnValue;
} #endregion #region 运行存储过程,返回输出参数
public static string ExecProcReturnStr(string ProcName, string ConnString, SqlParameter outPutParameter, params SqlParameter[] commandParameters)
{
string returnValue = "";
SqlConnection myconn = new SqlConnection(ConnString);
SqlCommand myCmd = new SqlCommand(ProcName, myconn); myCmd.CommandType = CommandType.StoredProcedure;
myCmd.Parameters.Add(outPutParameter); if ((commandParameters.Length > 0) && (commandParameters != null))
{
for (int i = 0; i < commandParameters.Length; i++)
{
myCmd.Parameters.Add(commandParameters[i]);
}
}
try
{
myconn.Open();
myCmd.ExecuteNonQuery();
returnValue = myCmd.Parameters[outPutParameter.ParameterName].Value.ToString();
myconn.Close();
}
catch (SqlException ex)
{
ex.ToString();
}
return returnValue;
}
#endregion }
}
能发给我一份完整的吗?
[email protected],谢谢
2.所有基于数据库数的界面统一采用用户控件,这样一来,你只需反复制作用户控件即可3.用户控件的加载:因为重复的较多,你可以采用一个配置文件,来记录要加载哪些用户控件,最好是基于XML的,扩展性较强4.对用户控件的逻辑处理形成单独的一个项目
5.建立一个统一的基接口,定义数据插入\删除\更新\查询方法,形成单独的项目
6.建立一个统一的抽象类,实现基接口,如果有其它需求,可以继承基接口和抽象类(注意,可分开继承)
7.对数据库的操作:从前台传入DATASET,其结构与数据一致,这样,可利用DATASET中数据行的行状态,采用循环方式生成SQL语句(主要针对文本,数值和日期)
/// 根据表名、主键列和数据集,产生多个INSERT语句
/// </summary>
/// <param name="dsSave"></param>
/// <param name="tsTableName"></param>
/// <param name="tsKayName"></param>
/// <param name="tsSequence"></param>
/// <returns></returns>
protected string GenerateOracleInsertSql(DataSet dsSave, string tsTableName, string tsKeyName, string tsSequence,bool ReturnValueFlag)
{
try
{
StringBuilder SqlBuilder = new StringBuilder();
SqlBuilder.Append("BEGIN ");
foreach (DataRow row in dsSave.Tables[tsTableName].Rows)
{
if (row.RowState == DataRowState.Added)
{
string lsKeyPara = ":NEWID";
StringBuilder loSqlBuilder = new StringBuilder();
StringBuilder loColumns = new StringBuilder();
StringBuilder loValues = new StringBuilder();
foreach (DataColumn column in dsSave.Tables[tsTableName].Columns)
{
if (column.ColumnName.ToLower() != tsKeyName.ToLower())
{
loColumns.Append(",");
loColumns.Append(column.ColumnName);
if (row[column] != null && row[column] != DBNull.Value)//有数据
{
if (column.DataType == typeof(System.DateTime))
{
loValues.Append(",");
loValues.Append("TIMESTAMP'" + row[column].ToString() + "'");
}
else
{
loValues.Append(",");
loValues.Append("'" + row[column].ToString() + "'");
}
}
else//无数据
{
loValues.Append(",null");
}
}
}
loSqlBuilder.Append("INSERT INTO " + tsTableName + " (");
loSqlBuilder.Append(tsKeyName);
loSqlBuilder.Append(loColumns.ToString());
loSqlBuilder.Append(") VALUES(" + tsSequence + ".NEXTVAL");
loSqlBuilder.Append(loValues.ToString());
if (ReturnValueFlag)
{
loSqlBuilder.Append(") RETURNING " + tsKeyName + " INTO " + lsKeyPara);
}
else
{
loSqlBuilder.Append(")");
}
loSqlBuilder.Append(";"); SqlBuilder.Append(loSqlBuilder.ToString());
} }
if (SqlBuilder.ToString() == "BEGIN ")//无插入数据
{
return "";
}
else
{
SqlBuilder.Append(" END;");
return SqlBuilder.ToString();
}
}
catch (Exception ex)
{
throw ex;
}
}
/// 生成ORACLE UPDATE语句批
/// </summary>
/// <param name="dsSave">要修改的语句批</param>
/// <param name="tsTableName">表名</param>
/// <param name="tsKeyName">主键列名</param>
/// <param name="tbValidate">验证修改时间标志</param>
/// <returns></returns>
protected string GenerateOracleUpdateSql(DataSet dsSave, string tsTableName, string tsKeyName, bool tbValidate)
{
try
{
StringBuilder loSqlBuilder = new StringBuilder();
loSqlBuilder.Append("BEGIN ");
foreach (DataRow row in dsSave.Tables[tsTableName].Rows)
{
if (row.RowState == DataRowState.Modified)
{
if (tbValidate)//验证修改时间是否一致
{
string lsSql = "SELECT MODIFYTIME FROM " + tsTableName + " WHERE " + tsKeyName + "=" + row[tsKeyName].ToString();
Database loDb = new Database();
DbCommand loCommand = loDb.GetDbCommand();
loCommand.CommandText = lsSql;
DataSet loResDs = loDb.ExecuteDataSet(loCommand);
DataRow loRow = loResDs.Tables[0].Rows[0];
if (loRow["MODIFYTIME"].ToString() != row["MODIFYTIMEOLD"].ToString())
{
return "ValidateWrong";
}
}
loSqlBuilder.Append(String.Format("UPDATE {0} SET ", tsTableName));
foreach (DataColumn column in dsSave.Tables[tsTableName].Columns)
{
if (column.ColumnName.ToLower() != tsKeyName.ToLower())
{
if (column.ColumnName.ToLower() != "modifytimeold")
{
if (row[column] != null && row[column] != DBNull.Value)//有数据
{
if (column.DataType == typeof(System.DateTime))
{
loSqlBuilder.Append(column.ColumnName + "=TIMESTAMP'" + row[column.ColumnName].ToString() + "',");
}
else
{
loSqlBuilder.Append(column.ColumnName + "='" + row[column.ColumnName].ToString() + "',");
}
}
else //NULL数据
{
loSqlBuilder.Append(column.ColumnName + "=null,");
}
}
} }
//去掉最后一个逗号
loSqlBuilder.Remove(loSqlBuilder.Length - 1, 1);
//加上WHERE条件
loSqlBuilder.Append(string.Format(" where {0}={1};", tsKeyName, row[tsKeyName].ToString()));
}
}
if (loSqlBuilder.ToString() == "BEGIN ")//无更新数据
{
return "";
}
else
{
loSqlBuilder.Append(" END;");
return loSqlBuilder.ToString();
}
}
catch (Exception ex)
{
throw ex;
}
}