C# 在WPF中调用更新过程?
我在SQL Server中有一个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
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;