惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
V
Vulnerabilities – Threatpost
L
LINUX DO - 热门话题
H
Hacker News: Front Page
Hacker News - Newest:
Hacker News - Newest: "LLM"
L
Lohrmann on Cybersecurity
Cisco Talos Blog
Cisco Talos Blog
O
OpenAI News
S
Securelist
Security Latest
Security Latest
T
Threat Research - Cisco Blogs
H
Heimdal Security Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recorded Future
Recorded Future
Microsoft Azure Blog
Microsoft Azure Blog
MyScale Blog
MyScale Blog
Webroot Blog
Webroot Blog
The Hacker News
The Hacker News
Google Online Security Blog
Google Online Security Blog
Latest news
Latest news
N
Netflix TechBlog - Medium
N
News and Events Feed by Topic
D
Docker
D
DataBreaches.Net
A
About on SuperTechFans
T
Tor Project blog
V
V2EX
G
Google Developers Blog
博客园 - Franky
N
News | PayPal Newsroom
T
The Blog of Author Tim Ferriss
I
InfoQ
H
Help Net Security
V2EX - 技术
V2EX - 技术
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
S
Security Affairs
SecWiki News
SecWiki News
The Register - Security
The Register - Security
人人都是产品经理
人人都是产品经理
NISL@THU
NISL@THU
小众软件
小众软件
B
Blog
T
Threatpost
P
Palo Alto Networks Blog
博客园 - 【当耐特】
L
LangChain Blog
AWS News Blog
AWS News Blog
月光博客
月光博客
宝玉的分享
宝玉的分享

博客园 - love .net FrameWork

SQL Server 2005 中的分区表和索引应用 Windows Forms 分页控件 WPF 插件开发(.NET Framework 3.5 System.Addin) 一生回味的100句凡人语录 经典短句 一生中必看的30个故事 别人看不懂的悲伤 Most of the 10 classic love sentence 5月28日 《魔兽争霸3》微操作基础教程 数据访问抽象基础类 无法将类型“ASP.login_aspx”转换为“System.Web.UI.WebControls.Login” - love .net FrameWork 看到一很好的SQL代码 关于ibatis.net框架(NPetshop学习) Stratrgy 策略模式 Factory Method 工厂方法模式(创建型模式) SQL各种日期转换代码大全 在ASP.NET中使用Session常见问题集锦(转) Sys.ArgumentOutOfRangeException: Value must be an integer - love .net FrameWork
拼接sql语句
love .net FrameWork · 2008-03-06 · via 博客园 - love .net FrameWork

     很早以前的一个方法,对于一些比较简单的小项目经常使用,自己在这里有进行了下完善和修改,感觉这个方法不错,不用写那些烦人的Insert和Update语句,尤其是字段特别多的时候,写起来很费时,可以省写很多代码,发出来大家看看,有什么不好的地方请各位大虾们指教。
     假如我们要对表Users表进行新增和编辑
     首先定义一个实体User实体类:

/// <summary>
    
/// 实体类Users
    
/// </summary>

    public class Users
    
{
        
public Users()
        
{ }

        
private int _id;
        
private string _username;
        
private int _usercode;
        
private string _sex;
        
private int _age;

        
/// <summary>
        
/// 系统ID,默认自增
        
/// </summary>

        public int ID
        
{
            
set { _id = value; }
            
get return _id; }
        }

        
/// <summary>
        
/// 用户名
        
/// </summary>

        public string UserName
        
{
            
set { _username = value; }
            
get return _username; }
        }

        
/// <summary>
        
/// 用户编号
        
/// </summary>

        public int UserCode
        
{
            
set { _usercode = value; }
            
get return _usercode; }
        }

        
/// <summary>
        
/// 性别
        
/// </summary>

        public string Sex
        
{
            
set { _sex = value; }
            
get return _sex; }
        }

        
/// <summary>
        
/// 年龄
        
/// </summary>

        public int Age
        
{
            
set { _age = value; }
            
get return _age; }
        }

    }

    存储sql语句字段名、字段值和字段类型的类:

public class SqlText
    
{
        
private string _ColumnName;
        
private string _ColumnValue;
        
private string _ColumnType;

        
public static string strType = "String";
        
public static string intType = "Int";


        
public SqlText(string ColumnName, string ColumnValue, string ColumnType)
        
{
            
this._ColumnName = ColumnName;
            
this._ColumnValue = ColumnValue;
            
this._ColumnType = ColumnType;
        }


        
public string ColumnName
        
{
            
get
            
{
                
return _ColumnName;
            }

        }


        
public string ColumnValue
        
{
            
get
            
{
                
return _ColumnValue;
            }

        }


        
public string ColumnType
        
{
            
get
            
{
                
return _ColumnType;
            }

        }

    }

    生成sql语句的类:

public class CreateSql
    
{
        
/// <summary>
        
/// 插入sql语句
        
/// </summary>
        
/// <param name="list">存放数据对象</param>
        
/// <param name="TableName">插入表名称</param>

        public static void Insert(List<SqlText> list, string TableName)
        
{
            
string sql = CreateInsert(list, TableName);
        }

        
        
/// <summary>
        
/// 修改sql语句
        
/// </summary>
        
/// <param name="list">存放数据对象</param>
        
/// <param name="TableName">插入表名称</param>
        
/// <param name="strWhere">输入条件,例如:ID=1</param>

        public static void Update(List<SqlText> list, string TableName, string strWhere)
        
{
            
string sql = CreateUpdate(list, TableName, strWhere);
        }


        
public static string CreateInsert(List<SqlText> list, string TableName)
        
{
            StringBuilder sb 
= new StringBuilder();
            StringBuilder sbStart 
= new StringBuilder();
            StringBuilder sbEnd 
= new StringBuilder();
            sbStart.Append(
"INSERT INTO " + TableName + " (");
            sbEnd.Append(
" VALUES (");
            
for (int i = 0; i < list.Count; i++)
            
{
                
if (i == 0)
                
{
                    sbStart.Append(list[i].ColumnName);
                    
if (list[i].ColumnType == SqlText.strType)
                    
{
                        sbEnd.Append(
"'" + list[i].ColumnValue + "'");
                    }

                    
else
                    
{
                        sbEnd.Append(list[i].ColumnValue);
                    }

                }

                
else
                
{
                    sbStart.Append(
"," + list[i].ColumnName);
                    
if (list[i].ColumnType == SqlText.strType)
                    
{
                        sbEnd.Append(
",'" + list[i].ColumnValue + "'");
                    }

                    
else
                    
{
                        sbEnd.Append(
"," + list[i].ColumnValue);
                    }

                }

            }

            sbStart.Append(
")");
            sbEnd.Append(
")");

            sb.Append(sbStart.ToString() 
+ sbEnd.ToString());
            
return sb.ToString();
        }


        
public static string CreateUpdate(List<SqlText> list, string TableName, string strWhere)
        
{
            StringBuilder sb 
= new StringBuilder();
            sb.Append(
"UPDATE " + TableName + " SET ");
            
for (int i = 0; i < list.Count; i++)
            
{
                
if (i == 0)
                
{
                    sb.Append(list[i].ColumnName 
+ " = ");
                }

                
else
                
{
                    sb.Append(
"," + list[i].ColumnName + " = ");
                }

                
if (list[i].ColumnType == SqlText.strType)
                
{
                    sb.Append(
"'" + list[i].ColumnValue + "'");
                }

                
else
                
{
                    sb.Append(list[i].ColumnValue);
                }

            }

            sb.Append(
" WHERE " + strWhere);
            
return sb.ToString();
        }

    }

    具体实现方法:

class Program
    
{
        
static void Main(string[] args)
        
{
            
//如果是新增一位人员信息
            string type = "ADD";
            
//如果是编辑一位人员信息
            
//string type = "ADD";

            Users user 
= new Users();
            user.UserName 
= "OR";
            user.UserCode 
= 1;
            user.Sex 
= "";
            user.Age 
= 24;

            List
<SqlText> list = new List<SqlText>();
            list.Add(
new SqlText("UserName", user.UserName.ToString(), SqlText.strType));
            list.Add(
new SqlText("UserCode", user.UserCode.ToString(), SqlText.intType));
            list.Add(
new SqlText("Sex", user.Sex.ToString(), SqlText.strType));
            list.Add(
new SqlText("Age", user.Age.ToString(), SqlText.intType));
            
try
            
{
                
if (type == "ADD")   //新增
                {
                    CreateSql.Insert(list, 
"Users");
                    list.Clear();
                }

                
else if (type == "EDIT")  //修改
                {
                    CreateSql.Update(list, 
"Users""ID=" + type);
                    list.Clear();
                }

            }

            
catch
            
{
                
throw;
            }

        }

    }