参数绑定

很多场景下 SQL 语句不是一个固定的字符串,需要传入多个动态的参数变量,这种场景下就可以使用绑定参数的方式进行操作.

标识

在 SQL 语句中,用字符 @ 或 : 标识动态参数,例如
SQL
INSERT INTO MY_TABLE VALUES (@v1,@v2,@v3,@v4,@v5)
上述 SQL 语句中动态参数有 @v1,@v2,@v3,@v4,@v5

参数绑定

OscarCommand 属性 Parameters 缓存执行SQL绑定参数集, 添加方法 Add 和 AddRange.

示例

using System;
using System.Data.OscarClient;

namespace ConsoleApp10
{
    internal class Program
    {
        static void Main(string[] args)
        {
            using (var connect = new OscarConnection("Server=10.1.1.66;Port=2003;User Id=SYSDBA;Password=szoscar55;Database=OSRDB;"))
            {
                connect.Open();
                using (var command = connect.CreateCommand())
                {
                    command.CommandText = "CREATE TABLE MY_TABLE (ID INT, NAME VARCHAR(16), AGE INT, SEX BOOLEAN, MARK TIMESTAMP)";
                    command.ExecuteNonQuery();

                    command.CommandText = "INSERT INTO MY_TABLE VALUES (@id,@name,@age,@sex,@mark)";
                    command.Parameters.Add(new OscarParameter("id", OscarDbType.Int) { Value = 1 });
                    command.Parameters.Add(new OscarParameter("name", OscarDbType.VarChar) { Value = "小张" });
                    command.Parameters.Add(new OscarParameter("age", OscarDbType.Int) { Value = 20 });
                    command.Parameters.Add(new OscarParameter("sex", OscarDbType.Boolean) { Value = true });
                    command.Parameters.Add(new OscarParameter("mark", OscarDbType.TimeStamp) { Value = DateTime.Now });
                    var result = command.ExecuteNonQuery();
                    command.Parameters.Clear();

                    command.CommandText = "SELECT * FROM MY_TABLE";
                    using (OscarDataReader reader = command.ExecuteReader())
                    {
                        Console.WriteLine("ID    NAME     AGE     SEX     MARK");
                        while (reader.Read())
                        {
                            var vals = new object[5];
                            reader.GetValues(vals);
                            Console.WriteLine("{0}     {1}     {2}      {3}    {4}", vals);
                        }
                    }

                    command.CommandText ="DROP TABLE MY_TABLE";
                    command.ExecuteNonQuery();
                }
            }
        }
    }
}

输出

ID    NAME     AGE     SEX     MARK
1     小张      20      True    2021-12-13 11:24:24
引用