我想检查逻辑表中是否存在逻辑名称。我的查询和过程正常工作,但在C#代码中它无法正常工作。假设ExecuteSchalar()返回0或1然后我检查它并显示一个消息框或继续其他代码。我的代码在下面
string LogicNameCheck_Query = "exec searchLogicName '{0}'";
LogicNameCheck_Query = string.Format(LogicNameCheck_Query , txtLogicName);
SqlCommand sc = new SqlCommand();
sc.Connection = sqlConnection1;
sc.CommandText = LogicNameCheck_Query;
if (sqlConnection1.State != ConnectionState.Open)
{
sqlConnection1.Open();
}
int existLogicName = Convert.ToInt32(sc.ExecuteScalar());
MessageBox.Show(existLogicName +"");
if(existLogicName == 1)
{
MessageBox.Show("name is exist");
return;
}
if (sqlConnection1.State != ConnectionState.Closed)
{
sqlConnection1.Close();
}
下面是searchLogicName过程代码:
ALTER procedure [dbo].[searchLogicName]
@LogName varchar(50)
as
IF EXISTS (select * from Logic where LogicName = @LogName)
select 1 else select 0
答案 0 :(得分:0)
txtLogicName 是一个TextBox。如果按原样放入字符串格式参数,则会返回类IE System.Windows.Forms.TextBox 的名称,而不是文本框的内容。内容来自Text属性。
但是,您应该更改逻辑以使用参数化查询来避免Sql Injection并解析问题(txtLogicName中的单引号将破坏您的string.Format代码)
CustomerID CustomerName Bank Amount
1 Martin BDO Php 55.00
1 Martin CBA Php 150.00
2 Grace BDO Php 45.00
2 Grace BDO Php 4100.00
3 Blake BPI Php 120
需要考虑的其他要点:
你不需要执行任何操作。 SqlCommand可以直接使用存储过程的名称,前提是您通知它您的commandtext是storedprocedure的名称。这是使用CommandType property完成的。
第二点要尽快改变。避免保留全局连接对象,然后每次检查它是否打开。只需使用在using statement内创建的本地SqlConnection变量。这样可以保证在完成连接后正确关闭和处理连接使用的资源。这样做没有任何惩罚,因为SqlClient类使用名为Connection Pooling
的基础结构