我想以我的Asp.net表格获取教育资格记录。因为我要上第10,第12,毕业,硕士的记录。所以我为此创建了四行......和5列(考试年份,董事会,百分比,总分,分部)。
现在,我希望通过在所有四个记录中保持一个用户的主键共用,通过单击按钮插入数据库中的所有行。
请帮我处理代码(C#)
答案 0 :(得分:1)
您可能希望使用复合主键。这是一个使用多列组成单个键的主键。有支持和反对这一战略的论据。请参阅:What are the pros and cons of using multi column primary keys?
例如,如果您的表格如下所示:
CREATE TABLE [dbo].[StudentExam]
(
[StudentId] INT NOT NULL PRIMARY KEY,
[Year] INT NOT NULL,
[Board] SOMEDATATYPE NOT NULL,
[Percentage] FLOAT NOT NULL,
[TotalMark] INT NOT NULL,
[Division] SOMEDATATYPE NOT NULL,
)
您可以改为将架构改为:
CREATE TABLE [dbo].[StudentExam]
(
[StudentId] INT NOT NULL,
[Year] INT NOT NULL,
[Board] SOMEDATATYPE NOT NULL,
[Percentage] FLOAT NOT NULL,
[TotalMark] INT NOT NULL,
[Division] SOMEDATATYPE NOT NULL,
CONSTRAINT [PK_StudentExam] PRIMARY KEY ([StudentId], [Year])
)
通过执行此操作,您声明对于此表中的任何给定行,它由Student和Year唯一标识。你仍然可以只询问学生,或仅查询年份,但只有他们一起确定一行。
有关主键的详细信息,请参阅Create Primary Keys
答案 1 :(得分:0)
在Sql中创建表类型
CREATE TYPE [dbo].[TypeName] AS TABLE(
[name1] [varchar](1000) NULL,
[name2] [varchar](1000) NULL,
[name3] [varchar](max) NULL
)
GO
在SQL中创建过程:
ALTER PROCEDURE [dbo].[InsertData]
@TableType TypeName readonly
AS
INSERT INTO [dbo].[Table_Master]
(Tname1,Tname2,Tname3)
select name1,name2,name3 from @TableType
然后转到代码背后
OpenConnection();
sqlcmd.CommandType = CommandType.StoredProcedure;
sqlcmd.CommandText = spName;
sqlcmd.Connection = sqlconn;
SqlParameter tvpParam = sqlcmd.Parameters.AddWithValue("@Type", Your
Datatable);
tvpParam.SqlDbType = SqlDbType.Structured;
SqlParameter returnParameter = sqlcmd.Parameters.Add("RetVal",
SqlDbType.Int);
returnParameter.Direction = ParameterDirection.ReturnValue;
sqlcmd.ExecuteNonQuery();
int Result = (int)returnParameter.Value;
sqlcmd.Dispose();
return Result;
将你的DT传递给Uper Code ...它将完全正常工作