sql server初学者 对uniqueidentifier数据类型的主键设置问题
各位大虾,我是sql server的初学者。我在vb.net编程中提示无法找到主键,我猜想想可能是我表中主键没有设置好,(但也可能是代码问题)比如
说如果主键数据类型为int,我可以把主键的标识选项改为“是”,那么该主键可以自动编号。但该主键是uniqueidentifier类型,请哪位根据
我所写的存储过程和程序看看,该主键应该怎么设置,谢谢。
1、出错提示:
过程 'sp_Products_SEL_byCategoryID' 需要参数 '@chrCategoryID',但未提供该参数。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.Data.SqlClient.SqlException: 过程 'sp_Products_SEL_byCategoryID' 需要参数 '@chrCategoryID',但未提供该参
数。
源错误:
行 34: sqlcmdSelectProducts.Connection = sqlconEBuyAdventure
行 35: Dim sqladpProducts As New SqlDataAdapter(sqlcmdSelectProducts)
行 36: sqladpProducts.Fill(dsproducts, "Products")
行 37: Return dsproducts
行 38: End Function
2、sql server的两个表 :
表一:ProductCategories
里面有三项: ProductCategoryID,ProductID,CategoryID (数据类型全为uniqueidentifier)
表二:Products
里面主键项为:ProductID (数据类型为: uniqueidentifier 16)
3、存储过程:
ALTER PROCEDURE sp_Products_SEL_byCategoryID
@chrCategoryID char(38)
AS
SELECT
Products.ProductID,
Products.SKU,
Products.ProductType,
Products.ProductDate,
Products.ProductName,
Products.Description,
Products.ProductSize,
Products.ImageURL,
Products.UnitPrice,
Products.Onsale
FROM Products,ProductCategories
WHERE Products.ProductID=ProductCategories.ProductID
AND ProductCategories.CategoryID=@chrCategoryID
return 1
4、页面调用代码(是一个简单的通过datalist调用显示数据库程序)
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim objCatagoriesDataset As DataSet
Dim strCategoryID As String = Request.Params("CategoryID")
Dim CategoryName As String
Dim objCatalog As New EBuyComm.Services.Categories
objCatagoriesDataset = New EBuyComm.dsProducts
objCatagoriesDataset = objCatalog.GetProducts(strCategoryID)
If objCatagoriesDataset.Tables("products").Rows.Count > 0 Then
CategoryName = objCatagoriesDataset.Tables("products").Rows.Item(0)("productType")
lblCategoryName.Text = "Category:" & CategoryName
End If
dlstProducts.DataSource = objCatalog.GetProducts(strCategoryID)
dlstProducts.DataBind()
End Sub
5、页面调用代码4种objCatalog.GetProducts(strCategoryID)中的getproducts类
Public Function GetProducts(ByVal strCategoryID As String) As dsProducts
Dim sqlcmdSelectProducts As New SqlCommand("sp_Products_SEL_byCategoryID")
With sqlcmdSelectProducts
.CommandType = CommandType.StoredProcedure
With .Parameters
.Add("@chrCategoryID", SqlDbType.Char, 38)
.Item("@chrCategoryID").Value = strCategoryID
End With
End With
Dim dsproducts As New dsProducts
Dim sqlconEBuyAdventure As New SqlConnection(connstring)
sqlcmdSelectProducts.Connection = sqlconEBuyAdventure
Dim sqladpProducts As New SqlDataAdapter(sqlcmdSelectProducts)
sqladpProducts.Fill(dsproducts, "Products")
Return dsproducts
End Function