我们的vb.net程序需要查询INFORMATION_SCHEMA.KEY_COLUMN_USAGE以确定运行时主键列的名称。我已手动验证测试表确实有一个主键,但下面的查询只返回值' -1'。我希望它返回主键列的column_name。我做错了什么?
VB.net代码:
'the sql query
Dim qry As String = "SELECT column_name " & _
"FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE " & _
"WHERE OBJECTPROPERTY(OBJECT_ID(constraint_name), 'IsPrimaryKey') = 1 " & _
"AND table_name = '" & tableName & "' "
'execute the query
Dim conn = New SqlConnection(SQLconnection)
Dim sqlcmd As SqlCommand = New SqlCommand(qry)
sqlcmd.CommandType = CommandType.Text
sqlcmd.Connection = conn
conn.Open()
Dim ColumnName As String = sqlcmd.ExecuteNonQuery().ToString
conn.Close()
我认为执行查询的代码的第二部分存在问题。但是我在上面的sql查询中尝试了很多变化,结果总是等于' -1'。有什么想法吗?
编辑:感谢大家的建议,特别是@SeanLange。修复此请求将上面的第二部分更改为不使用ExecuteNonQuery。 ExecuteNonQuery适用于UPDATE,INSERT和DELETE查询。
用于检索PrimaryKey columnname的代码是上述查询以及此代码:
Dim dataAdapter = New SqlDataAdapter(qry, SQLconnection)
Dim table As New System.Data.DataTable()
dataAdapter.Fill(table)
Dim ColumnName As String = table.Rows(0)(0).ToString()