我正在尝试使用sql server和vb.net在现有数据库中创建一个表。但是,在执行代码时,我得到了一个错误。这看起来像是权限错误,因为pos\u db存在,我通过同一个连接在项目的其他地方使用它。
我不能用( trusted_connection=true
)因为客户端通过网络通过sql服务器身份验证访问数据库。
有人能告诉我,怎么解决这个问题。
Public connString As String = "Data Source=SQLSERVER\SLMA;Database=POS_DB;User Id=sa;Password = xxxxxxxxxxxxx;" 'global connection string
错误:指定的架构名称“pos\u db”不存在或您没有使用它的权限。
下面是我用来创建表的代码(dbname是保存数据库名称的变量)
Private Sub cmdCreate_Click(sender As Object, e As EventArgs) Handles cmdCreate.Click
If conn.State = ConnectionState.Open Then
conn.Close()
End If
conn.Open()
Dim obj As SqlCommand
Dim strSQL As String
obj = conn.CreateCommand()
strSQL = "CREATE TABLE " & Trim(dbName) & ". ST_BOOK (" &
"Id int NOT NULL PRIMARY KEY, " &
"Entry VARCHAR(30), " &
"entry_date DATETIME, " &
"item_name VARCHAR(50) " &
") "
' Execute
obj.CommandText = strSQL
obj.ExecuteNonQuery()
conn.Close()
End Sub
3条答案
按热度按时间70gysomp1#
所以错误是:
错误:指定的架构名称“pos\u db”不存在或您没有使用它的权限。
提供以下信息“pos\u db”用作架构名称。
您的代码将数据库名称连接到架构名称所在的位置。
"CREATE TABLE " & Trim(dbName) & ". ST_BOOK (" &
应该是"CREATE TABLE " & Trim(dbName) & ".dbo.ST_BOOK (" &
或使用..
因为dbo是默认模式。"CREATE TABLE " & Trim(dbName) & "..ST_BOOK (" &
顺序就像[DatabaseName].[SchemaName].[ObjectName]
objectname=表、视图、存储过程、函数、索引等的名称。。。sbtkgmzw2#
preben huybrechts发表的评论很有效。
问题在于
顺序如下:
k4emjkb13#
只需按照以下步骤重写代码:
注1:
因为您已经在连接字符串中提到了数据库名称,所以您不需要在代码中再次提到它,而且默认情况下,您的脚本将针对您的数据库执行。
注2:
在创建表时,如果您没有提到表的架构,则默认情况下将在数据库用户的默认架构上创建表。如果不想使用默认模式创建表,那么还需要将模式名加上一个点与表名连接起来(
CREATE TABLE MySchema.ST_BOOK...
). 显然,您必须创建一个名为MySchema
(CREATE SCHEMA MySchema
),然后再创建表