我有一個SQL創建這樣返回字符串從SQL程序到C#
USE KOST
GO
--Cabang means Branch in Bahasa.
CREATE PROCEDURE login_pro
--received parameter
@NoIDStaff VARCHAR(5),
@Password VARCHAR (50)
AS
--sent parameter
DECLARE @status INT
DECLARE @IDCabang VARCHAR(5)
--owner login
IF EXISTS(SELECT IDCabang, [Password]
FROM MsStaff
WHERE @NoIDStaff=NoIDStaff AND @Password=[Password]
AND NoIDStaff LIKE('B%'))
SET @status=1
--staff login
ELSE IF EXISTS(SELECT IDCabang, [Password]
FROM MsStaff
WHERE @NoIDStaff=NoIDStaff AND @Password=[Password]
AND NoIDStaff LIKE('A%'))
BEGIN
SELECT @IDCabang=IDCabang FROM MsStaff
SET @status=2
SET @IDCabang = (select IDCabang FROM Msstaff where @NoIDStaff=NoIDStaff AND @Password=[Password]
AND NoIDStaff LIKE('A%'))
END
--neither of them login
ELSE
set @status=0
select @status, @IDCabang
GO
查詢返回的狀態值而不是IDCabang程序查詢。 我應該怎麼做才能返回IDCabang的價值?
這是我的C#代碼:
private void submit_Click(object sender, EventArgs e)
{
NoIDStaff = new SqlParameter();
Password = new SqlParameter();
SqlConnection con = new SqlConnection(strCon);
com = new SqlCommand();
com.Connection = con;
con.Open();
com.CommandType = CommandType.StoredProcedure;
com.CommandText = "login_pro";
NoIDStaff.SqlDbType = SqlDbType.VarChar;
NoIDStaff.Size = 50;
NoIDStaff.ParameterName = "@NoIDStaff";
NoIDStaff.Value = username.Text.ToString();
NoIDStaff.Direction = ParameterDirection.Input;
Password.SqlDbType = SqlDbType.VarChar;
Password.Size = 50;
Password.ParameterName = "@Password";
Password.Value = password.Text.ToString();
Password.Direction = ParameterDirection.Input;
com.Parameters.Add(NoIDStaff);
com.Parameters.Add(Password);
int status;
string IDCabang;
status = Convert.ToInt16(com.ExecuteScalar());
IDCabang = Convert.ToString(com.ExecuteScalar());
//owner login
if (status == 1)
{
this.Hide();
frm = new Form2();
frm.Show();
}
//staff login
else if (status == 2)
{
this.Hide();
frm4 = new Form4(IDCabang);
frm4.Show();
}
else if (username.Text.Equals(""))
{
MessageBox.Show("Username Must be Filled!", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else if (password.Text.Equals(""))
{
MessageBox.Show("Password Must be Filled!", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
MessageBox.Show("Invalid Username or Password", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
con.Close();
}
我想收到IDCabang爲字符串,所以我可以將它發送到Form4。但看起來,IDCabang沒有返回任何價值。
什麼是「不回」呢?你如何在你的C#代碼中引用這些列,因爲你沒有給他們別名?你爲什麼不使用正確的輸出參數? – 2013-04-11 16:33:31
您的代碼可以採用三種路徑。如果,否則,否則。你只是在Else If路徑中設置@IDCabang的值,所以如果它不經過這條路徑,它將不會被設置。 – 2013-04-11 16:34:53
在你的兩個條件中,你不會試圖設置@ @ IDCabang到任何意味着它將返回爲DBNull值的東西,如果它完全返回的話,這取決於你的C#代碼是如何設置的。當你試圖訪問你的返回值時,你的C#代碼是什麼樣的? – 2013-04-11 16:35:18