总算能贴代码了

这篇博客介绍了如何使用C#解析XML文件中的SQL语句,并将数据结构化为SqlData结构。同时,展示了如何基于这个结构创建MySqlCommand对象,进行参数化查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class Class1
    {
        public struct SqlData
        {
            public String sqlStatement;
            public String[] sqlParamKey;
            public String[] sqlParamType;
        }

        private Hashtable htSqlStatementData = null;

        public Hashtable SqlStatementData
        {
            get
            {
                return htSqlStatementData;
            }
        }

        public Class1()
        {
            htSqlStatementData = new Hashtable();
            getXmlSql();
        }

        private void getXmlSql()
        {
            try
            {
                XmlDocument dom = new XmlDocument();
                dom.Load("SqlStatement.xml");

                XmlNodeList nodeListSql = dom.GetElementsByTagName("SQL");

                if (nodeListSql == null)
                {
                    return;
                }

                for (int i = 0; i < nodeListSql.Count; i++)
                {
                    XmlNode sqlNode = nodeListSql[i];
                    String sqlId = sqlNode.Attributes["ID"].Value;
                    int paramCount = 0;
                    int.TryParse(sqlNode.Attributes["PARAMCOUNT"].Value, out paramCount);

                    SqlData sqlData = new SqlData();
                    sqlData.sqlParamKey = new string[paramCount];
                    sqlData.sqlParamType = new string[paramCount];

                    XmlNodeList nodeListSqlDetails =  sqlNode.ChildNodes;

                    if (nodeListSql == null)
                    {
                        continue;
                    }

                    int paramIndex = 0;

                    for (int j = 0; j < nodeListSqlDetails.Count; j++)
                    {
                        XmlNode sqlNodeDetail = nodeListSqlDetails[j];
                        if ("STATMENT".Equals(sqlNodeDetail.Name))
                        {
                            XmlNode textNode = sqlNodeDetail.FirstChild;
                            sqlData.sqlStatement = textNode.Value;
                            continue;
                        }

                        if ("PARAMENT".Equals(sqlNodeDetail.Name))
                        {
                            if (sqlData.sqlParamKey.Length <= paramIndex)
                            {
                                break;
                            }
                            sqlData.sqlParamKey[paramIndex] = sqlNodeDetail.Attributes["ID"].Value;
                            sqlData.sqlParamType[paramIndex] = sqlNodeDetail.Attributes["TYPE"].Value;

                        }
                    }
                    htSqlStatementData.Add(sqlId, sqlData);
                }

            }
            catch
            {
            }
           
        }

        public MySqlCommand getMySqlCommand(MySqlConnection con, string strCommandId, Hashtable htParam)
        {
            MySqlCommand command = con.CreateCommand();

            Object objHashData = htSqlStatementData[strCommandId];
            if (objHashData == null)
            {
                return null;
            }
            SqlData sqlData = (SqlData)objHashData;
           

            command.CommandText = sqlData.sqlStatement;

            if (sqlData.sqlParamKey == null || sqlData.sqlParamKey.Length == 0)
            {
                return command;
            }

            for (int i = 0; i < sqlData.sqlParamKey.Length; i++)
            {
                MySqlParameter param = new MySqlParameter();
                param.ParameterName = sqlData.sqlParamKey[i];
                param.MySqlDbType = (MySqlDbType)Enum.Parse(typeof(MySqlDbType), sqlData.sqlParamType[i], true);
                param.Value = htParam[sqlData.sqlParamKey[i]];
            }
            return command;
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值