2013-05-27 38 views
0

執行我有一個存儲過程的名稱SaveNewSupplier。只需解析xml並插入值。但是當我手動傳遞參數來執行存儲過程時,它工作正常並且值正確插入。 我將它上按鈕的單擊事件,這裏是我的代碼存儲過程不從C#應用程序窗口

SqlConnection sqlConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["SalesRetailConnectionString"].ConnectionString); 
SqlCommand command = new SqlCommand("SaveNewSupplier", sqlConnection); 
command.CommandType = CommandType.StoredProcedure; 

String xml = "<DocumentElement><Table1><SupName>Madan</SupName><Code>dsad</Code><Type>dddd</Type><Address>5555</Address><Country>india</Country><City>Kol</City><State>WB</State><Nationality>In</Nationality><PhoneNo>00000000</PhoneNo><AlternateNo>ATL</AlternateNo><MobileNo>99999999</MobileNo></Table1></DocumentElement>"; 

command.Parameters.Add("@pParam", SqlDbType.VarChar).Value = xml; 
sqlConnection.Open(); 
int ret = 0; 
ret = command.ExecuteNonQuery(); 
sqlConnection.Close(); 

這是我的app.config文件。

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    </configSections> 
    <connectionStrings> 
     <add name="SalesRetailConnectionString" 
      connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\SalesRetail.mdf;Integrated Security=True;User Instance=True" 
      providerName="System.Data.SqlClient" /> 
    </connectionStrings> 
</configuration> 

我當我執行此代碼command.ExecuteNonQuery();返回1,但在數據庫中沒有數據將存儲過程

ALTER PROCEDURE dbo.SaveNewSupplier 
(
    @pParam varchar(max) 
) 
AS 
begin 
    declare @SupName varchar(100) 
    declare @Code varchar(100) 
    declare @Type varchar(100) 
    declare @Address varchar(100) 
    declare @Country varchar(100) 
    declare @City varchar(100) 
    declare @State varchar(100) 
    declare @Nationality varchar(100) 
    declare @PhoneNo varchar(100) 
    declare @AlternateNo varchar(100) 
    declare @MobileNo varchar(100) 

    declare @XMLData XML 
    select @XMLData = @pParam 


    select @SupName = Tbl.Col.value('SupName[1]', 'varchar(100)'), 
      @Code = Tbl.Col.value('Code[1]', 'varchar(100)'), 
      @Type = Tbl.Col.value('Type[1]', 'varchar(100)'), 
      @Address = Tbl.Col.value('Address[1]', 'varchar(100)'), 
      @Country = Tbl.Col.value('Country[1]', 'varchar(100)'), 
      @City = Tbl.Col.value('City[1]', 'varchar(100)'), 
      @State = Tbl.Col.value('State[1]', 'varchar(100)'), 
      @Nationality = Tbl.Col.value('Nationality[1]', 'varchar(100)'), 
      @PhoneNo = Tbl.Col.value('PhoneNo[1]', 'varchar(100)'), 
      @AlternateNo = Tbl.Col.value('AlternateNo[1]', 'varchar(100)'), 
      @MobileNo = Tbl.Col.value('MobileNo[1]', 'varchar(100)') 
      from @XMLData.nodes('//Table1') Tbl(Col) 

    begin 
    insert into tblSupplierMaster(SupName, Code, Type, Address, Country, City, State, Nationality, PhoneNo, AlternateNo, MobileNo) 
    values (@SupName, @Code, @Type, @Address, @Country, 
      @City, @State, @Nationality, @PhoneNo, @AlternateNo, @MobileNo) 
    end 
end 

。我沒有解決問題。

謝謝。

+0

其中是存儲過程的來源? – Hogan

+0

對不起,但這是什麼(** command.Parameters.Add(「@ pParam」,SqlDbType.VarChar).Value = xml; **)是什麼意思?你是否將sp中的參數分開? –

+0

試試這個:'command.Parameters.Add(新的SqlParameter( 「@ pParam」,XML));' – PiLHA

回答

2

你的ConnectionString使用| DataDirectory目錄|替換字符串。這意味着如果您有WinForm應用程序,或者在ASP.NET的APP_DATA目錄中,您的MDF文件將通過BIN \ DEBUG或BIN \ RELEASE目錄中的數據訪問代碼進行搜索。

這裏有一個常見的錯誤,因爲開發人員將一個連接添加到指向位於項目文件夾中的MDF文件的服務器資源管理器中,然後使用此連接檢查結果,同時在BIN中更新/插入/刪除代碼\ DEBUG文件。

有效爲ExecuteNonQuery返回1,意味着一個記錄被插入。但不是你正在尋找

可以解決這個直接添加到數據庫通過SQL Server Management Studio中的SQLExpress,在你的配置更改連接字符串,然後更新服務器資源管理器的連接。

+0

但我怎麼能合併這兩個數據庫?我想查看只有一個實例 –

+0

保持一個項目文件夾爲空數據庫部署在您的應用程序已準備就緒,使用SQL Server Management Studio中的MDF文件添加到的SQLExpress當前實例和修復您的連接字符串 – Steve

+0

我沒有Sql Server Management Studio。我正在使用VS2010 professional –

相關問題