17941


よろしくお願いします。

とあるDBを、c#でSQLiteを使って作りたいです。

WindowsFormアプリケーションで使用するので、  
VisualStdio Community 2015 で作成しています。

Windows8.1です。

テーブルを作成するクリエイト文で、

> 型 'System.Data.SQLite.SQLiteException' のハンドルされていない例外が  
>  System.Data.SQLite.dll で発生しました
>
> 追加情報:SQL logic error or missing database
>
> near "(": syntax error

というエラーが発生します。

コードは以下の通りです。

[code]

    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
    
                /****** DB,TABLE,レコード作成のソースコード******/
    
                //dbファイル名
                string db_file = "test.db";
    
                //db接続
                using (var conn = new SQLiteConnection("Data Source=" + db_file))
                {
                    //dbを開く
                    conn.Open();
    
                    //コマンド生成宣言
                    using (SQLiteCommand command = conn.CreateCommand())
                    {
                        //create文格納
                        command.CommandText = "create table AAA(aaa_cd TEXT(2)  PRIMARY KEY NOT NULL, aaa_nm TEXT(40) NOT NULL)";
                        //コマンド実行
                        command.ExecuteNonQuery();
                    }
    
                    //コマンド生成宣言
                    using (SQLiteCommand command1 = conn.CreateCommand())
                    {
                        command1.CommandText = "create table BBB(bbb_cd TEXT(4)  PRIMARY KEY NOT NULL, bbb_nm(40) TEXT NOT NULL)";
                        command1.ExecuteNonQuery();
                    }
    
                    //コマンド生成宣言
                    using (SQLiteCommand command2 = conn.CreateCommand())
                    {
    
                        command2.CommandText = "create table CCC(aaa_cd TEXT(2)  PRIMARY KEY NOT NULL, bbb_cd TEXT(4) NOT NULL)";
                        command2.ExecuteNonQuery();
                    }
    
                    //トランザクション処理
                    using (SQLiteTransaction sqlt = conn.BeginTransaction())
                    {
                        //コマンド生成宣言
                        using (SQLiteCommand command = conn.CreateCommand())
                        {
                            //List<AAA>のレコード一覧をforeachで回しながらTABLEに格納する処理
                            foreach (AAATable m in mList)
                            {
                                //insert文格納
                                command.CommandText = "insert into AAA(aaa_cd,aaa_nm) values('" + m.aaa_cd + "', '" + m.aaa_nm + "')";
                                //コマンド実行
                                command.ExecuteReader();
                            }
    
                            //List<BBBTable>のレコード一覧をforeachで回しながらTABLEに格納する処理
                            foreach (BBBTable m in mList2)
                            {
                                //insert文格納
                                command.CommandText = "insert into BBB(bbb_cd,bbb_nm) values('" + m.bbb_cd + "', '" + m.bbb_nm + "')";
                                //コマンド実行
                                command.ExecuteReader();
                            }
    
                            //List<CCCTable>のレコード一覧をforeachで回しながらTABLEに格納する処理
                            foreach (CCCTable m in mList3)
                            {
                                //insert文格納
                                command.CommandText = "insert into CCC(aaa_cd,bbb_cd) values('" + m.aaa_cd + "', '" + m.bbb_cd + "')";
                                //コマンド実行
                                command.ExecuteReader();
                            }
                        }
                        //トランザクション処理終了
                        sqlt.Commit();
                    }
    
                    //dbを閉じる
                    conn.Close();
                }
    
           /**************************************
              ここから各Tableのダミーデータ作成
            **************************************/
    
            //AAATableのダミーデータ作成
            private class AAATable
            {
                public string aaa_cd;
                public string aaa_nm;
    
                public AAATable(string _aaa_cd, string _aaa_nm)
                {
                    aaa_cd = _aaa_cd;
                    aaa_nm = _aaa_nm;
                }
            }
    
            //BBBTableのダミーデータ作成
            private class BBBTable
            {
                public string bbb_cd;
                public string bbb_nm;
    
                public BBBTable(string _bbb_cd, string _bbb_nm)
                {
                    bbb_cd = _bbb_cd;
                    bbb_nm = _bbb_nm;
                }
            }
    
            //CCCTableのダミーデータ作成
            private class CCCTable
            {
                public string aaa_cd;
                public string bbb_cd;
    
                public CCCTable(string _aaa_cd, string _bbb_cd)
                {
                    aaa_cd = _aaa_cd;
                    bbb_cd = _bbb_cd;
                }
            }
    
            /************* ここまで **************/
    
            /**************************************
                ここから格納するレコード一覧    
            **************************************/
    
            //AAATablに格納するレコード一覧
            List<AAATable> mList = new List<AAATable>()
            {
                new AAATable(@"xx",@"あああ"),
                new AAATable(@"yy",@"いいい"),
                new AAATable(@"zz",@"ううう"),
            };
    
            //BBBTableに格納するレコード一覧
            List<BBBTable> mList2 = new List<BBBTable>()
            {
                new BBBTable(@"u",@"わ"),
                new BBBTable(@"v",@"を"),
                new BBBTable(@"w",@"ん"),
            };
    
            //CCCTableに格納するレコード一覧
            List<CCCTable> mList3 = new List<CCCTable>()
            {
                new CCCTable(@"xx",@"u"),
                new CCCTable(@"yy",@"v"),
                new CCCTable(@"zz",@"w"),
            };
    
            /************* ここまで **************/
        }
    }
    
[/code]

この中で、

[code]

                //コマンド生成宣言
                using (SQLiteCommand command1 = conn.CreateCommand())
                {
                    command1.CommandText = "create table BBB(bbb_cd TEXT(4)  PRIMARY KEY NOT NULL, bbb_nm(40) TEXT NOT NULL)";
                    command1.ExecuteNonQuery();
                }
    
[/code]

2つ目のクリエイト文を実行するExecuteNonQuery();でエラーが発生しています。

最後の } にブレークポイントを設定し実行するとエラーが発生し、  
ExecuteNonQuery();の行にブレークポイントを設定して実行すると、ブレークポイントで止まります。(ブレークが実行される？)

エラー文の通りの原因ではなく、恐らく複数のテーブルを作成するコードの書き方自体が間違っているのではないかと思ってはいるのですが、調べてみても予約語が使われていた例やDBのパスがちゃんと設定されていないだとかといった物しか出てきませんでした。

参考になるサイトや原因、解決策等何でも良いので意見がほしいです。  
よろしくお願いします。

/****追記****/

一部コードを変えてもダメでした。

[code]

     //コマンド生成宣言
                        using (SQLiteCommand command = conn.CreateCommand())
                        {
                            //create文格納
                            command.CommandText = "create table AAA(aaa_cd TEXT(2)  PRIMARY KEY NOT NULL, aaa_nm TEXT(40) NOT NULL)";
                            //コマンド実行
                            command.ExecuteNonQuery();
                        }
    
                        //コマンド生成宣言
                        using (SQLiteCommand command1 = conn.CreateCommand())
                        {
                            command1.CommandText = "create table BBB(bbb_cd TEXT(4)  PRIMARY KEY NOT NULL, bbb_nm(40) TEXT NOT NULL)";
                            command1.ExecuteNonQuery();
                        }
    
                        //コマンド生成宣言
                        using (SQLiteCommand command2 = conn.CreateCommand())
                        {
    
                            command2.CommandText = "create table CCC(aaa_cd TEXT(2)  PRIMARY KEY NOT NULL, bbb_cd TEXT(4) NOT NULL)";
                            command2.ExecuteNonQuery();
                        }
    
[/code]


CC BY-SA 3.0
2015-10-22T08:28:04.990
17940
2015-10-24T22:39:54.893
2015-10-22T08:35:47.103
12797
12797
question
c# visual-studio sqlite
SQLiteのクリエイト文を実行する箇所でnear "(": syntax errorというエラーが発生


> bbb_nm(40) TEXT

ここは`bbb_nm TEXT(40)`では。


CC BY-SA 3.0
2015-10-22T08:33:55.813
17941
2015-10-22T08:33:55.813
5750
17940
answer