簡體   English   中英

非靜態字段,方法或屬性'System.Data.Common.DbCommand.ExecuteScalar()'需要對象引用

[英]An object reference is required for the non-static field, method, or property 'System.Data.Common.DbCommand.ExecuteScalar()'

我正在使用Windows窗體應用程序中的本地數據庫。 它的工作原理就像魅力一樣,但是我想檢查用戶搜索的記錄是否在數據庫中。 我編寫了以下代碼,但出現錯誤,我不知道如何解決。 我知道我將非靜態對象引用到靜態方法。 但是不知道如何解決。 預先感謝 !

 private void button1_Click(object sender, EventArgs e)
            {
                if (textBox1.Text.Length != 0)
                {
                    var connString = @"Data Source=C:\Users\Andrei\Documents\Visual Studio 2010\Projects\Stellwag\Stellwag\Angajati.sdf";
                    using (var conn = new SqlCeConnection(connString))
                    {
                        try
                        {
                            var numePrenume = textBox1.Text.Trim().Split(' ');
                            var nume = numePrenume[0];
                            var prenume = numePrenume[1];
                            conn.Open();
                            var query = "SELECT COUNT(*) FROM info WHERE Nume='" + nume + "' AND Prenume='" + prenume + "'";
                            var command = new SqlCeCommand(query, conn);
                            var dataAdapter = new SqlCeDataAdapter(command);
                            var dataTable = new DataTable();
                            dataAdapter.Fill(dataTable);
                            int userCount = (int) SqlCeCommand.ExecuteScalar();

                            if (userCount > 0)
                            {
                                Info form = new Info(nume, prenume);
                                form.Show();
                            }
                            else
                            {
                                MessageBox.Show("Nu exista un angajat cu acest nume");
                            }


                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.ToString());
                        }

                    }
            }

替換int userCount = (int) SqlCeCommand.ExecuteScalar();

int userCount = (int) command.ExecuteScalar(); 

因為SqlCeCommand是一個類,而ExecuteScalar()是該類的非靜態方法。 因此,如果沒有引用,您將無法訪問ExecuteScalar() 在此語句中var command = new SqlCeCommand(query, conn); 您正在創建對該類的引用,因此可以通過該引用調用ExecuteScalar()

您需要使用SqlCeCommand對象,而不是類本身。 只要改變你的

int userCount = (int)SqlCeCommand.ExecuteScalar();

int userCount = (int)command.ExecuteScalar();

還有幾件事;

  • COUNT(*)之后有一個額外的* 去掉它。
  • 您應該始終使用參數化查詢 這類字符串連接對SQL注入攻擊開放。
  • 使用using語句可以像處理連接一樣自動配置命令和適配器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM