c#SQL存储过程Id问题
我的存储过程不能像我想象的那样工作,我不知道如何修复它。使用SQLServerManagementStudio 2008 这是存储值的位置:c#SQL存储过程Id问题,c#,sql,bulk,C#,Sql,Bulk,我的存储过程不能像我想象的那样工作,我不知道如何修复它。使用SQLServerManagementStudio 2008 这是存储值的位置: SELECT * FROM [Events].[dbo].[Fouten] where TreinId = 1338 然而,“1338”是Treinen表中的一个字段的名称,该字段通过TreinId链接到Fouten表。例如:TreinId=136,Name='1338' 因此,我尝试插入name字段并从另一个表中检索Id,以便将结果输入: SELE
SELECT *
FROM [Events].[dbo].[Fouten] where TreinId = 1338
然而,“1338”是Treinen表中的一个字段的名称,该字段通过TreinId链接到Fouten表。例如:TreinId=136,Name='1338'
因此,我尝试插入name字段并从另一个表中检索Id,以便将结果输入:
SELECT *
FROM [Events].[dbo].[Fouten] where TreinId = 136
存储过程(microsoft sql manager 2008):
c#代码:
您应该能够执行
SELECT
以输入INSERT
语句,而不是试图将其强制输入VALUES
语法:
INSERT INTO dbo.Fouten
(Datum,FoutCode,Omschrijving,Module,Time,Teller,Mnemo,TreinId)
SELECT
@Datum,
@Foutcode,
@Omschrijving,
@Module,
@Time,
@Teller,
@Mnemo,
TreinId from [Events].[dbo].[Treinen]
WHERE
Name = @treinNaam;
如果您的RDBMS具有检索表的最新插入的自动增量编号的功能,那么它将变得更加容易。听起来您需要一个简单的
连接。使用标记dbms。(该sp代码是特定于产品的。)它仍然使用名称作为TreinId,而不是使用与名称匹配的TreinId:(可能是因为这一部分?sbc.ColumnMappings.Add(“treinNaam”,“TreinId”);嗯,是的……如果将名称的值放入ID参数中,那么这将是一个问题。
public void BatchBulkCopy(string rapport)
{
// Get the DataTable
DataTable dtInsertRows = TextReader(rapport);
using (SqlBulkCopy sbc = new SqlBulkCopy(GetConnectionString(), SqlBulkCopyOptions.CheckConstraints))
{
sbc.DestinationTableName = "dbo.Fouten";
sbc.BatchSize = 8000;
sbc.ColumnMappings.Add("Datum", "Datum");
sbc.ColumnMappings.Add("Foutcode", "FoutCode");
sbc.ColumnMappings.Add("Omschrijving", "Omschrijving");
sbc.ColumnMappings.Add("Module", "Module");
sbc.ColumnMappings.Add("Time", "Time");
sbc.ColumnMappings.Add("Teller", "Teller");
sbc.ColumnMappings.Add("Mnemo", "Mnemo");
sbc.ColumnMappings.Add("treinNaam", "TreinId");
sbc.NotifyAfter = dtInsertRows.Rows.Count;
sbc.SqlRowsCopied += new SqlRowsCopiedEventHandler(sbc_SqlRowsCopied);
try
{
sbc.WriteToServer(dtInsertRows);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message.ToString());
}
sbc.Close();
}
}
INSERT INTO dbo.Fouten
(Datum,FoutCode,Omschrijving,Module,Time,Teller,Mnemo,TreinId)
SELECT
@Datum,
@Foutcode,
@Omschrijving,
@Module,
@Time,
@Teller,
@Mnemo,
TreinId from [Events].[dbo].[Treinen]
WHERE
Name = @treinNaam;