C# 在WPF中调用更新过程?

C# 在WPF中调用更新过程?,c#,sql,sql-server,wpf,C#,Sql,Sql Server,Wpf,我在SQL Server中有一个Update存储过程,我正在从我的WPF应用程序调用它,但我只想要我给出的要更新的字段(我的过程更新了4列) 当您在SQL中执行它时,在不想更新的字段后面使用NULL,它就可以工作了。那么,有没有可能给我的文本框一个空值,这样它就会看到它是一个空值 我的更新存储过程: ALTER PROCEDURE [dbo].[InfoUpdate] (@ID int, @name varchar(20) = NULL, @surname va

我在SQL Server中有一个
Update
存储过程,我正在从我的WPF应用程序调用它,但我只想要我给出的要更新的字段(我的过程更新了4列)

当您在SQL中执行它时,在不想更新的字段后面使用NULL,它就可以工作了。那么,有没有可能给我的文本框一个空值,这样它就会看到它是一个空值

我的
更新
存储过程:

ALTER PROCEDURE [dbo].[InfoUpdate] 
    (@ID int, 
     @name varchar(20) = NULL, 
     @surname varchar(20) = NULL, 
     @city varchar(20) = NULL)
AS
BEGIN
    SET NOCOUNT ON;
    SET XACT_ABORT ON

    UPDATE dbo.Information
    SET Name = ISNULL(@name, Name),
        Surname= ISNULL(@surname, Surname),
        City= ISNULL(@city, City)
    WHERE ID = @ID 
END
当我执行它时:

exec dbo.InfoUpdate
         @ID = 1,
         @name = XXX,
         @surname = NULL,
         @city = NULL
它可以工作,它保留旧数据,只更新我想要的列

但是,当您从WPF执行此操作时,它会使该列变为空白并打开

我可以给我的文本框一个
NULL
值吗

我的WPF代码:

 // Connection to database
 string cs = "Data Source=localhost;Initial Catalog=TESTSECTION;Integrated Security=True";

 SqlConnection conn = new SqlConnection();
 conn.ConnectionString = cs;

 string x = null;

 conn.Open();

 SqlCommand sqlcom = new SqlCommand("dbo.InfoUpdate", conn);
 sqlcom.Parameters.Add("@ID", SqlDbType.Int).Value = ID.Text;
 sqlcom.Parameters.Add("@name", SqlDbType.VarChar).Value = Name.Text;
 sqlcom.Parameters.Add("@surname", SqlDbType.VarChar).Value = Surname.Text;
 sqlcom.Parameters.Add("@city", SqlDbType.VarChar).Value = City.Text;
 sqlcom.CommandType = CommandType.StoredProcedure;

 sqlcom.ExecuteNonQuery();
 conn.Close();

 conn.Open();
 DataTable dt = new DataTable();

 SqlDataAdapter da = new SqlDataAdapter();
 da.SelectCommand = new SqlCommand("SELECT * FROM dbo.Information", conn);
 da.Fill(dt);

 DataGrid.ItemsSource = dt.DefaultView;
 conn.Close();
我的错误从这里开始:

DBNull.Value : Name.Text;

无法确定条件表达式的类型,因为“System.DBNull”和“string”之间没有隐式转换。

正如我在上面的评论中所说,不能将TextBox.Text设置为NULL。如果您尝试这样做,什么也不会发生,当您读回它时,您会再次得到一个空字符串

但是,当文本框为空(或空白)时,可以将参数设置为


你的问题会更清楚,如果你添加你的代码我看到你的更新,但这不是我要找的代码。我指的是执行更新的WPF代码,它使用文本框的值。(提示:文本框。文本永远不会为空,它只是一个空字符串)这就是您的列所发生的情况。如果将文本框留空,则字段将设置为空字符串。因此,您需要更改代码中的某些内容,以更新WPF应用程序中的字段。那么如何将我的文本框设置为空?抱歉,我不理解您的编辑。你有错误吗?如果是,错误消息是什么?你能在这里添加注释吗?无法确定条件表达式的类型,因为'System.DBNull'和'string'之间没有隐式转换,只是在DBNull-
(object)DBNull.Value之前强制转换了。请稍候,我输入了一个错误。。非常感谢。史蒂夫:你帮了大忙!
sqlcom.Parameters.Add("@name", SqlDbType.VarChar).Value =
       string.IsNullOrWhiteSpace(Name.Text) ? DBNull.Value : (object)Name.Text;
sqlcom.Parameters.Add("@surname", SqlDbType.VarChar).Value = 
       string.IsNullOrWhiteSpace(Surname.Text) ? DBNull.Value : (object)Surname.Text;
sqlcom.Parameters.Add("@city", SqlDbType.VarChar).Value = 
       string.IsNullOrWhiteSpace(City.Text) ? DBNull.Value : (object)City.Text;