我为了这个方法在这里发了两个求助的帖子,虽然都没有得到什么帮助把,好多人建议我用XML,我想有时间可以实验下。不过好在这个方法写完了,经过测试还可以。我只是简单的测试了下。嘿嘿
不过这个方法有个缺陷就是不能自动更新三层中的MODEL实体,需要自己手动去添加MODEL实体。
/***************************************
*作者:[email protected]
*创世时间:2010-3-23
*描述:
*本功能模块主要是用来实现根据表中字段数量自动完成SQL语句
***************************************/
/// <summary>
/// 获取表中字段名、类型、大小
/// </summary>
/// <param name="tableName">设置表名称</param>
/// <returns>得到DataTable</returns>
private static DataTable GetDataTable(string tableName)
{
string strSql = "select name,prec,(select name from systypes where xusertype=syscolumns.xusertype) from syscolumns where id=object_id('" + tableName + "')";
DataTable dt = new DataTable();
using (SqlConnection con = new SqlConnection(connectionString))
{
con.Open();
using (SqlDataAdapter adp = new SqlDataAdapter(strSql, con))
{
adp.Fill(dt);
}
}
return dt; }
/// <summary>
/// SQL语句自动完成方法
/// </summary>
/// <param name="tableName">SQL表名称</param>
/// <returns>返回影响行数的非查询方法</returns>
public static int ExecutNonQery(string tableName, string sqlType)
{
DataTable dt = new DataTable();
dt = GetDataTable(tableName);//传入表名称作为参数
dt.Rows.RemoveAt(0);//删除dt中第一行数据因为第一行一般作为自增长ID,不允许进行insert
//SQL语句拼写开始
StringBuilder strSql = new StringBuilder();
if (sqlType.ToLower() == "insert")
{
strSql.Append("insert into ");//设置SQL语句为insert语句
strSql.Append(tableName + "(");
for (int i = 0; i < dt.Rows.Count; i++)
{
strSql.Append(dt.Rows[i][0].ToString());
if (i < (dt.Rows.Count - 1))
{
strSql.Append(",");
} }
//获取要insert数据的字段名
strSql.Append(" ) values ( ");
for (int i = 0; i < dt.Rows.Count; i++)
{
strSql.Append("@" + dt.Rows[i][0].ToString());
if (i < (dt.Rows.Count - 1))
{
strSql.Append(",");
} }
//设置insert相对应的变量
strSql.Append(")");
SqlParameter[] par = new SqlParameter[dt.Rows.Count];//创建SqlParameter数组并且大小等于dt行数
for (int j = 0; j < dt.Rows.Count; j++)
{
par[j] = new SqlParameter("@" + dt.Rows[j][0].ToString(), (SqlDbType)Enum.Parse(typeof(SqlDbType), GetType(dt.Rows[j][2].ToString().ToLower())), Convert.ToInt32(dt.Rows[j][1].ToString()));
//填充数组 }
object[] o = new object[dt.Rows.Count + 1];
int y = 0;
foreach (PropertyInfo iteminfo in model.GetType().GetProperties())
{
o[y] = iteminfo.GetValue(model, null);
y++; }
//动态获取model实体里边的所有对象属性并且填充到对象数组
for (int i = 1; i < o.Length; i++)
{
par[i - 1].Value = o[i].ToString();
}
return ExecuteSql(strSql, par);
}
DataTable table = new DataTable();
if (sqlType.ToLower() == "update")
{
table = GetDataTable(tableName);
strSql.Append("update ");
strSql.Append(tableName + " set ");
for (int i = 0; i < dt.Rows.Count; i++)
{
strSql.Append(dt.Rows[i][0].ToString() + "=" + "@" + dt.Rows[i][0].ToString());
if (i < (dt.Rows.Count - 1))
{
strSql.Append(",");
} }
strSql.Append(" where " + table.Rows[0][0].ToString() + "=" + "@" + table.Rows[0][0].ToString());
SqlParameter[] par = new SqlParameter[table.Rows.Count];//创建SqlParameter数组并且大小等于dt行数
for (int j = 0; j < table.Rows.Count; j++)
{
par[j] = new SqlParameter("@" + table.Rows[j][0].ToString(), (SqlDbType)Enum.Parse(typeof(SqlDbType), GetType(table.Rows[j][2].ToString().ToLower())), Convert.ToInt32(table.Rows[j][1].ToString()));
//填充数组 }
object[] o = new object[table.Rows.Count];
int y = 0;
foreach (PropertyInfo iteminfo in model.GetType().GetProperties())
{
o[y] = iteminfo.GetValue(model, null);
y++; }
//动态获取model实体里边的所有对象属性并且填充到对象数组
for (int i = 0; i < o.Length; i++)
{
par[i].Value = o[i].ToString();
}
//将对象数组中的数据赋值给SqlParameter数组
return ExecuteSql(strSql, par);
} return 0; }
不过这个方法有个缺陷就是不能自动更新三层中的MODEL实体,需要自己手动去添加MODEL实体。
/***************************************
*作者:[email protected]
*创世时间:2010-3-23
*描述:
*本功能模块主要是用来实现根据表中字段数量自动完成SQL语句
***************************************/
/// <summary>
/// 获取表中字段名、类型、大小
/// </summary>
/// <param name="tableName">设置表名称</param>
/// <returns>得到DataTable</returns>
private static DataTable GetDataTable(string tableName)
{
string strSql = "select name,prec,(select name from systypes where xusertype=syscolumns.xusertype) from syscolumns where id=object_id('" + tableName + "')";
DataTable dt = new DataTable();
using (SqlConnection con = new SqlConnection(connectionString))
{
con.Open();
using (SqlDataAdapter adp = new SqlDataAdapter(strSql, con))
{
adp.Fill(dt);
}
}
return dt; }
/// <summary>
/// SQL语句自动完成方法
/// </summary>
/// <param name="tableName">SQL表名称</param>
/// <returns>返回影响行数的非查询方法</returns>
public static int ExecutNonQery(string tableName, string sqlType)
{
DataTable dt = new DataTable();
dt = GetDataTable(tableName);//传入表名称作为参数
dt.Rows.RemoveAt(0);//删除dt中第一行数据因为第一行一般作为自增长ID,不允许进行insert
//SQL语句拼写开始
StringBuilder strSql = new StringBuilder();
if (sqlType.ToLower() == "insert")
{
strSql.Append("insert into ");//设置SQL语句为insert语句
strSql.Append(tableName + "(");
for (int i = 0; i < dt.Rows.Count; i++)
{
strSql.Append(dt.Rows[i][0].ToString());
if (i < (dt.Rows.Count - 1))
{
strSql.Append(",");
} }
//获取要insert数据的字段名
strSql.Append(" ) values ( ");
for (int i = 0; i < dt.Rows.Count; i++)
{
strSql.Append("@" + dt.Rows[i][0].ToString());
if (i < (dt.Rows.Count - 1))
{
strSql.Append(",");
} }
//设置insert相对应的变量
strSql.Append(")");
SqlParameter[] par = new SqlParameter[dt.Rows.Count];//创建SqlParameter数组并且大小等于dt行数
for (int j = 0; j < dt.Rows.Count; j++)
{
par[j] = new SqlParameter("@" + dt.Rows[j][0].ToString(), (SqlDbType)Enum.Parse(typeof(SqlDbType), GetType(dt.Rows[j][2].ToString().ToLower())), Convert.ToInt32(dt.Rows[j][1].ToString()));
//填充数组 }
object[] o = new object[dt.Rows.Count + 1];
int y = 0;
foreach (PropertyInfo iteminfo in model.GetType().GetProperties())
{
o[y] = iteminfo.GetValue(model, null);
y++; }
//动态获取model实体里边的所有对象属性并且填充到对象数组
for (int i = 1; i < o.Length; i++)
{
par[i - 1].Value = o[i].ToString();
}
return ExecuteSql(strSql, par);
}
DataTable table = new DataTable();
if (sqlType.ToLower() == "update")
{
table = GetDataTable(tableName);
strSql.Append("update ");
strSql.Append(tableName + " set ");
for (int i = 0; i < dt.Rows.Count; i++)
{
strSql.Append(dt.Rows[i][0].ToString() + "=" + "@" + dt.Rows[i][0].ToString());
if (i < (dt.Rows.Count - 1))
{
strSql.Append(",");
} }
strSql.Append(" where " + table.Rows[0][0].ToString() + "=" + "@" + table.Rows[0][0].ToString());
SqlParameter[] par = new SqlParameter[table.Rows.Count];//创建SqlParameter数组并且大小等于dt行数
for (int j = 0; j < table.Rows.Count; j++)
{
par[j] = new SqlParameter("@" + table.Rows[j][0].ToString(), (SqlDbType)Enum.Parse(typeof(SqlDbType), GetType(table.Rows[j][2].ToString().ToLower())), Convert.ToInt32(table.Rows[j][1].ToString()));
//填充数组 }
object[] o = new object[table.Rows.Count];
int y = 0;
foreach (PropertyInfo iteminfo in model.GetType().GetProperties())
{
o[y] = iteminfo.GetValue(model, null);
y++; }
//动态获取model实体里边的所有对象属性并且填充到对象数组
for (int i = 0; i < o.Length; i++)
{
par[i].Value = o[i].ToString();
}
//将对象数组中的数据赋值给SqlParameter数组
return ExecuteSql(strSql, par);
} return 0; }
/***************************************
*作者:[email protected]
*创世时间:2010-3-23
*描述:
*本功能模块主要是用来实现根据表中字段数量自动完成SQL语句
***************************************/
/// <summary>
/// 获取表中字段名、类型、大小
/// </summary>
/// <param name="tableName">设置表名称</param>
/// <returns>得到DataTable</returns>
private static DataTable GetDataTable(string tableName)
{
string strSql = "select name,prec,(select name from systypes where xusertype=syscolumns.xusertype) from syscolumns where id=object_id('" + tableName + "')";
DataTable dt = new DataTable();
using (SqlConnection con = new SqlConnection(connectionString))
{
con.Open();
using (SqlDataAdapter adp = new SqlDataAdapter(strSql, con))
{
adp.Fill(dt);
}
}
return dt;}
/// <summary>
/// SQL语句自动完成方法
/// </summary>
/// <param name="tableName">SQL表名称</param>
/// <returns>返回影响行数的非查询方法</returns>
public static int ExecutNonQery(string tableName, string sqlType)
{
DataTable dt = new DataTable();
dt = GetDataTable(tableName);//传入表名称作为参数
dt.Rows.RemoveAt(0);//删除dt中第一行数据因为第一行一般作为自增长ID,不允许进行insert
//SQL语句拼写开始
StringBuilder strSql = new StringBuilder();
if (sqlType.ToLower() == "insert")
{
strSql.Append("insert into ");//设置SQL语句为insert语句
strSql.Append(tableName + "(");
for (int i = 0; i < dt.Rows.Count; i++)
{
strSql.Append(dt.Rows[i][0].ToString());
if (i < (dt.Rows.Count - 1))
{
strSql.Append(",");
}}
//获取要insert数据的字段名
strSql.Append(" ) values ( ");
for (int i = 0; i < dt.Rows.Count; i++)
{
strSql.Append("@" + dt.Rows[i][0].ToString());
if (i < (dt.Rows.Count - 1))
{
strSql.Append(",");
}}
//设置insert相对应的变量
strSql.Append(")");
SqlParameter[] par = new SqlParameter[dt.Rows.Count];//创建SqlParameter数组并且大小等于dt行数
for (int j = 0; j < dt.Rows.Count; j++)
{
par[j] = new SqlParameter("@" + dt.Rows[j][0].ToString(), (SqlDbType)Enum.Parse(typeof(SqlDbType), GetType(dt.Rows[j][2].ToString().ToLower())), Convert.ToInt32(dt.Rows[j][1].ToString()));
//填充数组}
object[] o = new object[dt.Rows.Count + 1];
int y = 0;
foreach (PropertyInfo iteminfo in model.GetType().GetProperties())
{
o[y] = iteminfo.GetValue(model, null);
y++;}
//动态获取model实体里边的所有对象属性并且填充到对象数组
for (int i = 1; i < o.Length; i++)
{
par[i - 1].Value = o[i].ToString();
}
return ExecuteSql(strSql, par);
}
DataTable table = new DataTable();
if (sqlType.ToLower() == "update")
{
table = GetDataTable(tableName);
strSql.Append("update ");
strSql.Append(tableName + " set ");
for (int i = 0; i < dt.Rows.Count; i++)
{
strSql.Append(dt.Rows[i][0].ToString() + "=" + "@" + dt.Rows[i][0].ToString());
if (i < (dt.Rows.Count - 1))
{
strSql.Append(",");
}}
strSql.Append(" where " + table.Rows[0][0].ToString() + "=" + "@" + table.Rows[0][0].ToString());
SqlParameter[] par = new SqlParameter[table.Rows.Count];//创建SqlParameter数组并且大小等于dt行数
for (int j = 0; j < table.Rows.Count; j++)
{
par[j] = new SqlParameter("@" + table.Rows[j][0].ToString(), (SqlDbType)Enum.Parse(typeof(SqlDbType), GetType(table.Rows[j][2].ToString().ToLower())), Convert.ToInt32(table.Rows[j][1].ToString()));
//填充数组}
object[] o = new object[table.Rows.Count];
int y = 0;
foreach (PropertyInfo iteminfo in model.GetType().GetProperties())
{
o[y] = iteminfo.GetValue(model, null);
y++;}
//动态获取model实体里边的所有对象属性并且填充到对象数组
for (int i = 0; i < o.Length; i++)
{
par[i].Value = o[i].ToString();
}
//将对象数组中的数据赋值给SqlParameter数组
return ExecuteSql(strSql, par);
}return 0;}