C# 单击一次运行两条SQL语句
我有一个非常简单的应用程序,只有一个按钮。当用户单击该按钮时,它将运行5-6条SQL语句。但它给出了如下错误。如果我在sql Management Studio上运行sql,那么它运行时不会出现问题。但是如果我用c运行它,它会给出错误 我怎样才能解决这个问题 这是我的sql代码。我在每一句话之间加了一个中间词C# 单击一次运行两条SQL语句,c#,sql,sql-server,C#,Sql,Sql Server,我有一个非常简单的应用程序,只有一个按钮。当用户单击该按钮时,它将运行5-6条SQL语句。但它给出了如下错误。如果我在sql Management Studio上运行sql,那么它运行时不会出现问题。但是如果我用c运行它,它会给出错误 我怎样才能解决这个问题 这是我的sql代码。我在每一句话之间加了一个中间词 CREATE PROCEDURE [dbo].[AGIRLIK] @DONEMREF int AS DECLARE @LOGICALREF
CREATE PROCEDURE [dbo].[AGIRLIK]
@DONEMREF int
AS
DECLARE
@LOGICALREF INT,
@EXPCENTERREF INT,
@POSTEDPRDREF INT,
@OVHDCLNREF INT,
@TOTAL FLOAT
DECLARE C_CURSOR CURSOR FOR
SELECT D.LOGICALREF,D.POSTEDPRDREF ,D.EXPCENTERREF ,D.OVHDCLNREF ,SUM(OT.TOTAL)
FROM LG_001_ACTOVRHDDIST D
INNER JOIN LG_001_OVHDTRANS as ot
ON D.OVHDCLNREF=OT.OVHDCLNREF
WHERE D.POSTEDPRDREF=@DONEMREF
GROUP BY D.LOGICALREF,D.POSTEDPRDREF ,D.EXPCENTERREF ,D.OVHDCLNREF
OPEN C_CURSOR
FETCH NEXT FROM C_CURSOR
INTO @LOGICALREF ,@POSTEDPRDREF ,@EXPCENTERREF ,@OVHDCLNREF,@TOTAL
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE LG_001_ACTOVRHDDIST
SET TOTAL=@TOTAL
WHERE POSTEDPRDREF=@DONEMREF
AND POSTEDPRDREF=@POSTEDPRDREF
AND EXPCENTERREF=@EXPCENTERREF
AND OVHDCLNREF=@OVHDCLNREF
FETCH NEXT FROM C_CURSOR
INTO @LOGICALREF ,@POSTEDPRDREF ,@EXPCENTERREF ,@OVHDCLNREF,@TOTAL
END
CLOSE C_CURSOR
DEALLOCATE C_CURSOR
GO
ALTER VIEW LS_AGIRLIK_DAGILIM
AS
SELECT LOGICALREF [REF],
FICHENO [URETIM_EMRI_NO],
DATE_ [URETIM_EMRI_TARIHI],
(SELECT CODE FROM LG_001_ROUTING WHERE P.ROUTINGREF=LOGICALREF) [ROTA_KODU],
(SELECT NAME FROM LG_001_ROUTING WHERE P.ROUTINGREF=LOGICALREF) [ROTA_ADI],
(SELECT CODE FROM LG_001_ITEMS WHERE P.ITEMREF=LOGICALREF) [STOK_KODU],
(SELECT NAME FROM LG_001_ITEMS WHERE P.ITEMREF=LOGICALREF) [STOK_ADI],
CAST ((SELECT WEIGHT FROM LG_001_ITMUNITA where ITEMREF=P.ITEMREF) AS FLOAT) [GR_MT],
(CAST ((SELECT WEIGHT FROM LG_001_ITMUNITA where ITEMREF=P.ITEMREF) AS FLOAT))*ACTAMOUNT [AGIRLIK],
ACTAMOUNT [GERCEKLESEN_MIKTAR],
(CASE STATUS
WHEN 0 THEN 'BASLAMADI'
WHEN 1 THEN 'DEVAM_EDIYOR'
WHEN 3 THEN 'TAMAMLANDI'
WHEN 4 THEN 'KAPANDI'
END)
[DURUMU],
ACTMATERIALCOST [GERCEKLESEN_MALZEME_MALIYETI],
ACTOVERHCOST [GERCEKLESEN_GENEL_GIDER_PAYI],
ACTTOTALCOST [GERCEKLESEN_TOPLAM_MALIYET]
FROM LG_001_PRODORD P WHERE CANCELLED=0 AND STATUS<>0 AND
ROUTINGREF NOT IN (SELECT LOGICALREF FROM LG_001_ROUTING WHERE CODE LIKE 'B%')
AND SPECODE<>'MONTAJ'
AND DATE_ BETWEEN '2014-02-06' AND '2014-02-13'
GO
----------------------------
ALTER VIEW DBO.[LS_CARPAN]
AS
SELECT
REF,
AGIRLIK/(SELECT SUM(AGIRLIK) FROM LS_AGIRLIK_DAGILIM) [YUZDE]
FROM LS_AGIRLIK_DAGILIM
GO
----------------------------
使用[数据库名称]
必须在脚本的第一行指定。GO是Management Studio理解的批处理分隔符,sqlcmd不是TSQL命令。您也需要在C代码中使用它作为批之间的分隔符。我明白,但我应该使用什么?您面临什么错误?我不认为它是重复的。我不是在问如何使用GO。我在问应该用什么替换GO?当然,假设客户端上安装了sqlcmd。
string sPath = @"D:\script.sql";
if (File.Exists(sPath) == false)
return;
string sServer = "SQL SERVER INSTANCE NAME";
string sUserID = "sa";
string sPassword = "password";
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.FileName = "sqlcmd";
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
if (sPassword == "")
p.StartInfo.Arguments = string.Format("-S {0} -i {1} ", sServer, sPath);
else
p.StartInfo.Arguments = string.Format("-S {0} -U {1} -P {2} -i " + Convert.ToChar(34) + "{3}" + Convert.ToChar(34), sServer, sUserID, sPassword, sPath);
bool started = p.Start();
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();