C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

SQLサーバで主キーの作成

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■86887 / inTopicNo.1)  SQLサーバで主キーの作成
  
□投稿者/ Mu (4回)-(2018/04/01(Sun) 13:26:20)

分類:[.NET 全般] 

Vs2015,.NET4.5 C# Win7 32bit
お世話になります。
SqlServer上にテーブルを作成し、主キーを追加したいのですが、うまくできません。

Microsoft.SqlServer.Management.Common.ServerConnection con = new ServerConnection(m_cnSqlSv);
Server srv = new Microsoft.SqlServer.Management.Smo.Server(con);
Database db = srv.Databases[Properties.Settings.Default.Catalog4];

Table tb = new Table(db, "TableList");
tb.Schema = "test";


Column cl = new Column(tb, "TableName", DataType.NVarChar(20));
tb.Columns.Add(cl);

cl = new Column(tb, "E_NO", DataType.Int);
tb.Columns.Add(cl);

tb.Create();

Index idx = new Index(tb, "PK_TableList");
idx.IndexKeyType = IndexKeyType.DriPrimaryKey; ★
idx.IsClustered = false;
idx.IsUnique = true;
idx.IndexedColumns.Add(new IndexedColumn(idx, "TableName", false));
idx.Create();


上記を実装する関数がコールされた時点で以下のエラーが出ます。

メソッドが見つかりません: 'Void Microsoft.SqlServer.Management.Smo.Index.set_IndexKeyType(Microsoft.SqlServer.Management.Smo.IndexKeyType)'

★の部分がないとテーブルは作成されるのですが、主キーにはなりません。
インデックスはできているようです。

PrimaryKeyを作成するにはどのようにすればよいでしょうか。
よろしくお願いします。
引用返信 編集キー/
■86889 / inTopicNo.2)  Re[1]: SQLサーバで主キーの作成
□投稿者/ 魔界の仮面弁士 (1597回)-(2018/04/02(Mon) 10:50:21)
No86887 (Mu さん) に返信
> SqlServer上にテーブルを作成し、主キーを追加したいのですが、うまくできません。
既存テーブルの変更ではなく、
新規テーブルの作成なのですね。

実際に運用する「データの読み書きが出来る一般ユーザー」に対して
「スキーマの変更権限」を与えていたり、あるいは逆に、
システム管理者のアカウントでアプリを運用していたりはしないでしょうか。
https://docs.microsoft.com/ja-jp/dotnet/framework/data/adonet/sql/authorization-and-permissions-in-sql-server


> Microsoft.SqlServer.Management.Common.ServerConnection con = new ServerConnection(m_cnSqlSv);
> Server srv = new Microsoft.SqlServer.Management.Smo.Server(con);

特に間違いというわけではないのですが、
  名前空間付き con = new クラス名のみ(m_cnSqlSv);
  クラス名のみ crv = new 名前空間付き(con);
という構文に対称性が無いのが気にかかりました。


> Column cl = new Column(tb, "TableName", DataType.NVarChar(20));
> tb.Columns.Add(cl);
> idx.IndexedColumns.Add(new IndexedColumn(idx, "TableName", false));
NULL 許容列を 主キーとすることはできません。Nullable = false を指定してください。
Column cl = new Column(tb, "TableName", DataType.NVarChar(20)) { Nullable = false };


> Vs2015,.NET4.5 C# Win7 32bit
> idx.IndexKeyType = IndexKeyType.DriPrimaryKey;   ★
どのバージョンの Microsoft.SqlServer.Smo.dll をお使いでしょうか?

IndexKeyType プロパティを実装していないバージョンには
心当たりがないのですが、一応念のため。
https://msdn.microsoft.com/ja-jp/library/microsoft.sqlserver.management.smo.index.indexkeytype%28sql.120%29.aspx


> メソッドが見つかりません: 'Void Microsoft.SqlServer.Management.Smo.Index.set_IndexKeyType(Microsoft.SqlServer.Management.Smo.IndexKeyType)'
SMO のバージョン不整合による問題という可能性はないでしょうか?
https://social.technet.microsoft.com/Forums/sqlserver/en-US/d659a1e3-a493-4d20-a8dd-226720e78503/method-not-found-void-microsoftsqlservermanagementdatabasemaintenancetaskuiutilsctor?forum=sqltools

SQL Server のバージョンと、SQL Server Native Client のバージョンが
合致しているかどうかを確認し、違っていたり、あるいは古いバージョンが
後からインストールされていたりした場合は、再セットアップを試みては如何でしょう。
https://docs.microsoft.com/ja-jp/sql/relational-databases/server-management-objects-smo/backward-compatibility-in-smo


> PrimaryKeyを作成するにはどのようにすればよいでしょうか。
どうしても駄目なら、こんな感じにしてみるとか。

db.ExecuteNonQuery($@"
CREATE TABLE test.TableName (
  TableName NVARCHAR(20) NOT NULL, E_NO INT,
  CONSTRAINT PK_TableList PRIMARY KEY (
  TableName ASC))
");

引用返信 編集キー/
■86905 / inTopicNo.3)  Re[2]: SQLサーバで主キーの作成
□投稿者/ Mu (6回)-(2018/04/02(Mon) 16:51:41)
魔界の仮面弁士様
お世話になります。

原因は
>SMO のバージョン不整合による問題という可能性はないでしょうか?
Microsoft.SqlServer.ConnectionInfo
Microsoft.SqlServer.Smo
Microsoft.SqlServer.SqlEnum
これらのバージョンが一致していなかったことが原因でした。

詳しくご解説いただき、誠にありがとうございました m(__)m。



解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ