IT Staff

Blog về chuyên ngành IT

Thao tác sql với NuoDB bằng C# .NET Console Application

leave a comment »

– Cách tốt nhất để biết nó hay hoặc dở là sử dụng nó. –

Ở bài trước, mình đã cài đặt thành công NuoDB và đã tương tác với NuoDB ODBC Driver rồi. Do đó, mình đã chắc chắn driver đã được cài đặt và chạy tốt. Nhưng mình sẽ không làm thủ công để tạo DSNs cho NuoDB domain nữa, bạn có thể tham khảo và sử dụng cách thêm DSN-names tự động ở đây.
Mở Visual Studio > Create New Project > trong Project types, chọn Visual C# > trong templates, chọn Console Application > OK.

– Tạo một DSN tên là TestChorusDSN với uid=admin, pwd=admin và database=testchorus@localhost trên máy cục bộ.

– Mở kết nối đến TestChorusDSN vừa tạo, tạo một table có tên ngẫu nhiên là: user.test + DateTime.utcnow.ticks. Có 2 field id và name.

– Insert dữ liệu vào table vừa tạo.

– Select dữ liệu của table vừa tạo.

– Xóa DSN TestChorusDSN.

Source code của chương trình chính như sau:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Data.Odbc;

using System.Data;

 

namespace ConsoleApplication1

{

    class Program

    {

        [System.Runtime.InteropServices.DllImport(“ODBCCP32.dll”)]

        static extern bool SQLConfigDataSource(IntPtr parent, int request, string driver, string attributes);

        ///<summary>

        /// Tạo và xóa DSNs

        ///</summary>

        ///<param name=”remove”></param>

        ///<returns></returns>

        static bool HandleDSN(bool remove)

        {

            return SQLConfigDataSource(IntPtr.Zero

                , remove ? /* ODBC_REMOVE_DSN */ 3 : /* ODBC_ADD_DSN */ 1

                , “NuoDB ODBC Driver”

                , “DSN=TestChorusDSNUID=adminPWD=adminDatabase=TestChorus@localhost”);

 

        }

 

        static void Main(string[] args)

        {

            const string Separator = “\t|\t”;

 

            Console.WriteLine(“Adding DSN…”);

            HandleDSN(false);

 

            var csb = new OdbcConnectionStringBuilder();

            csb.Dsn = “TestChorusDSN”;

            using (var conn = new OdbcConnection(csb.ToString()))

            {

                Console.WriteLine(“Opening connection…”);

                conn.Open();

                Console.WriteLine(“Starting transaction…”);

                using (var tx = conn.BeginTransaction())

                {

                    string tableName = string.Format(“user.test{0}”, DateTime.UtcNow.Ticks);

                    using (var cmd = conn.CreateCommand())

                    {

                        cmd.Transaction = tx;

                        cmd.CommandText = string.Format(“create table {0} (id int primary key, name string not null)”, tableName);

                        Console.WriteLine(“Creating table…”);

                        cmd.ExecuteNonQuery();

                    }

                    using (var cmd = conn.CreateCommand())

                    {

                        cmd.Transaction = tx;

                        cmd.CommandText = string.Format(“insert into {0}(id, name) values (?, ?)”, tableName);

                        cmd.Prepare();

                        IDbDataParameter parameter;

                        for (var i = 0; i < 10; i++)

                        {

                            cmd.Parameters.Clear();

 

                            parameter = cmd.CreateParameter();

                            parameter.Value = i;

                            cmd.Parameters.Add(parameter);

 

                            parameter = cmd.CreateParameter();

                            parameter.Value = string.Format(“value of {0}”, i);

                            cmd.Parameters.Add(parameter);

 

                            Console.WriteLine(“Inserting…”);

                            cmd.ExecuteNonQuery();

                        }

                    }

 

 

                    using (var cmd = conn.CreateCommand())

                    {

                        cmd.Transaction = tx;

                        cmd.CommandText = string.Format(“select * from {0}”, tableName);

                        Console.WriteLine(“Reading data…”);

                        using (var reader = cmd.ExecuteReader())

                        {

                            Console.WriteLine(string.Join(Separator, Enumerable.Range(0, reader.FieldCount).Select(x => reader.GetName(x)).ToArray<string>()));

                            while (reader.Read())

                            {

                                var values = new object[reader.FieldCount];

                                reader.GetValues(values);

 

                                Console.WriteLine(string.Join(Separator, values.Select(row => row.ToString()).ToArray<string>()));

                            }

                        }

                    }

                    Console.WriteLine(“Committing…”);

                    tx.Commit();

                }

            }

 

            Console.WriteLine(“Removing DSN…”);

            HandleDSN(true);

        }

 

    }

}

Bạn có thể comment để trao đổi kinh nghiệm. Cám ơn bạn đã quan tâm đến bài viết.

Tài liệu tham khảo:

http://www.cs.brown.edu/courses/cs227/slides/dtxn/nuodb.pdf [ NuoDB introduction ]

http://ww1.prweb.com/prfiles/2011/08/22/8738428/NuoDB%20White%20Paper%20v310.pdf [ NuoDB White paper v310 ]

http://blog.cincura.net/232841-using-nuodb-from-net [ using NuoDB from net ]

http://blog.sqlauthority.com/2012/07/31/sql-server-beginning-nuodb-who-will-benefit-and-how-to-start/#comment-325934 [ begining NuoDB at sqlautority blog ]

http://sqlandsiva.blogspot.com/2011/11/nuodb-acid-compliant-scalable-cloud_02.html [ NuoDB – ACID Compliant, Scalable Cloud Database ]

nuodb-acid-compliant-scalable-cloud

Written by Xavier

July 11, 2014 at 3:08 am

Posted in C#, Database, Lap trinh, NuoDB, Staff

Tagged with , , , ,

Leave a comment