??xml version="1.0" encoding="utf-8" standalone="yes"?>青草伊人久久,一级精品视频在线观看宜春院,精品视频久久久久久久http://www.aygfsteel.com/keweibo/category/52611.html一? Java 多能 C#,Delphi,Powerbuilder ... <br> <script type="text/javascript"><!-- google_ad_client = "ca-pub-1944176156128447"; /* 468x15, 创徏?09-2-25 */ google_ad_slot = "5582725142"; google_ad_width = 468; google_ad_height = 15; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>zh-cnWed, 02 Jul 2014 02:24:28 GMTWed, 02 Jul 2014 02:24:28 GMT60DataTable更新数据操作(?http://www.aygfsteel.com/keweibo/articles/415278.htmlKeKeMon, 30 Jun 2014 07:49:00 GMThttp://www.aygfsteel.com/keweibo/articles/415278.htmlhttp://www.aygfsteel.com/keweibo/comments/415278.htmlhttp://www.aygfsteel.com/keweibo/articles/415278.html#Feedback0http://www.aygfsteel.com/keweibo/comments/commentRss/415278.htmlhttp://www.aygfsteel.com/keweibo/services/trackbacks/415278.html

BLL?nbsp;     

  public void Update(DataTable dt)
        {
            foreach (DataRow dr in dt.Rows)
            {
                if (dr.RowState == DataRowState.Deleted)
                    continue;
                if (dr.RowState == DataRowState.Modified || dr.RowState == DataRowState.Added)
                {
                    if (dr["usr_id"] == DBNull.Value)
                    {
                        throw new Exception("用户代码不能为空");
                    }                }
            }

            dal.Update(dt);
        }

       

DAL?/p>

 public void Update(DataTable dt)
        {
            SqlDataAdapter adapter = new SqlDataAdapter();
            SqlConnection conn = new SqlConnection(SqlHelper.ConnectionString);
            conn.Open();

            adapter.InsertCommand = new SqlCommand("INSERT INTO dbo.t6( com_id ,usr_id ) VALUES( @com_id ,@usr_id)", conn);
            adapter.InsertCommand.CommandType = CommandType.Text;
            adapter.InsertCommand.Parameters.Add("@com_id", SqlDbType.VarChar, 4, "com_id");
            adapter.InsertCommand.Parameters.Add("@usr_id", SqlDbType.VarChar, 8, "usr_id");

            adapter.UpdateCommand = new SqlCommand("update t6 setwhereand usr_id", conn);
            adapter.UpdateCommand.CommandType = CommandType.Text;
            adapter.UpdateCommand.Parameters.Add("@com_id", SqlDbType.VarChar, 4, "com_id");
            adapter.UpdateCommand.Parameters.Add("@usr_id", SqlDbType.VarChar, 8, "usr_id");
            adapter.UpdateCommand.Parameters.Add("@usr_id1", SqlDbType.VarChar, 8, "usr_id");
            adapter.UpdateCommand.Parameters["@usr_id1"].SourceVersion = DataRowVersion.Original;

            adapter.DeleteCommand = new SqlCommand("delete from t6 whereand usr_id", conn);
            adapter.DeleteCommand.CommandType = CommandType.Text;
            adapter.DeleteCommand.Parameters.Add("@com_id", SqlDbType.VarChar, 4, "com_id");
            adapter.DeleteCommand.Parameters.Add("@usr_id", SqlDbType.VarChar, 8, "usr_id");

            adapter.DeleteCommand.Parameters["@com_id"].SourceVersion = DataRowVersion.Original;
            adapter.DeleteCommand.Parameters["@usr_id"].SourceVersion = DataRowVersion.Original;

            adapter.Update(dt);
        }

 

前台

    public partial class DataTableUpdate : Form
    {

        public BLL.Users Bu = new BLL.Users();
        public DataTable dtUsr = new DataTable();
        public MOD.Users modObject = new MOD.Users();

        public string _UserId = "";

        public DataTableUpdate()
        {
            InitializeComponent();
            dataGridView1.AutoGenerateColumns = false;
        }

//H口加蝲

        private void Form1_Load(object sender, EventArgs e)
        {
            dtUsr = Bu.GetList();
            dataGridView1.DataSource = dtUsr;
            BindValue();
        }

        private void BindValue()
        {
            tb_com_id.DataBindings.Add("Text", dataGridView1.DataSource, "com_id");
            tb_UsrId.DataBindings.Add("Text", dataGridView1.DataSource, "usr_id");

            //手动修改可以; 代码赋值需要用下面q句?br />            tb_UsrId.DataBindings[0].DataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged;
        }

        private void 保存_Click(object sender, EventArgs e)
        {
            foreach (DataRow dr in dtUsr.Rows)
            {
                dr.EndEdit();
            }
            try
            {
                Bu.Update(dtUsr);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return;
            }
            MessageBox.Show("保存成功Q?, "pȝ提示");
        }

        private void 删除_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("(zhn)确认要删除用户Q? + tb_UsrName.Text.Trim()+" ?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.No)
                return;

            if (dataGridView1.CurrentCell == null)
                return;

            try
            {
                dataGridView1.Rows.Remove(dataGridView1.CurrentRow);
                Bu.Update(dtUsr);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return;
            }
            MessageBox.Show("删除成功Q?, "pȝ提示");
           
        }

        private void 增加_Click(object sender, EventArgs e)
        {
            DataRow dr = dtUsr.NewRow();
            dr["usr_id"] = _UserId;
            dtUsr.Rows.Add(dr);
            dataGridView1.CurrentCell = dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells[0];
        }

        private void 取消_Click(object sender, EventArgs e)
        {
            dtUsr.RejectChanges();
        }
牛铁Q?a style="color: rgb(63,167,203); text-decoration: underline" >http://blog.csdn.net/fangxinggood/archive/2008/04/18/2304047.aspx



Ke 2014-06-30 15:49 发表评论
]]>
在数据表(DataTable)中操作数??http://www.aygfsteel.com/keweibo/articles/415272.htmlKeKeMon, 30 Jun 2014 03:08:00 GMThttp://www.aygfsteel.com/keweibo/articles/415272.htmlhttp://www.aygfsteel.com/keweibo/comments/415272.htmlhttp://www.aygfsteel.com/keweibo/articles/415272.html#Feedback0http://www.aygfsteel.com/keweibo/comments/commentRss/415272.htmlhttp://www.aygfsteel.com/keweibo/services/trackbacks/415272.html转自Q?a >http://blog.csdn.net/cui55/article/details/1371411

?span class="Apple-converted-space"> DataSet 中创?span class="Apple-converted-space"> DataTable 之后Q?zhn)执行的活动可以与使用数据库中的表时执行的zd相同。?zhn)可以d、查看、编辑和删除表中的数据;可以监视错误和事Ӟq且可以查询表中的数据。在修改 DataTable 中的数据Ӟ(zhn)也可以验证更改是否正确Qƈ军_是否以编E方式接受更Ҏ(gu)拒绝更改?/p>

本节内容

数据添臌?/font>:说明如何创徏新行q将其添臌中?/p>
在创?span class="Apple-converted-space"> DataTable q用列和约束定义其l构之后Q?zhn)可以新的数据行添至表中。要d新行Q可一个新变量声明?span class="Apple-converted-space"> DataRow cd。调?span class="Apple-converted-space"> NewRow Ҏ(gu)Ӟ返回新?span class="Apple-converted-space"> DataRow 对象。然后,DataTable ?x)根据表的结构?span id="wmqeeuq" class="Apple-converted-space"> DataColumnCollection 的定义创?span class="Apple-converted-space"> DataRow 对象?

以下CZ演示了如何通过调用 NewRow Ҏ(gu)来创建新行?/p>

DataRow workRow = workTable.NewRow();

然后(zhn)可以用烦引或列名来操作新d的行Q如下例所C?/p>

workRow["CustLName"] = "Smith";
workRow[1] = "Smith";

在将数据插入新行后,Add Ҏ(gu)可用于将行添?span class="Apple-converted-space"> DataRowCollectionQ如以下代码所C?/p>

workTable.Rows.Add(workRow);

(zhn)也可以通过传入值的数组Q类型化?span class="Apple-converted-space"> ObjectQ,调用 Add Ҏ(gu)来添加新行,如下例所C?/p>

workTable.Rows.Add(new Object[] {1, "Smith"});

类型化?span class="Apple-converted-space"> Object 的值的数组传递到 Add Ҏ(gu)Q可在表内创建新行ƈ其列D|ؓ(f)对象数组中的倹{请注意Q数l中的g(x)Ҏ(gu)它们在表中出现的序相与各列匹配?/p>

以下CZ十行添x建的 Customers 表中?/p>

DataRow workRow;

for (int i = 0; i <= 9; i++) 
{
  workRow = workTable.NewRow();
  workRow[0] = i;
  workRow[1] = "CustName" + i.ToString();
  workTable.Rows.Add(workRow);
}

查看表中数据:说明如何讉K行中的数据,包括数据的原始版本和当前版本?/p>
可以使用 DataTable ?span class="Apple-converted-space"> Rows ?span class="Apple-converted-space"> Columns 集合来访?span class="Apple-converted-space"> DataTable 中的内容。也可以Ҏ(gu)包括搜烦标准、排序顺序和行状态等特定标准Q?span class="Apple-converted-space"> DataTable.Select Ҏ(gu)q回 DataTable 中数据的子集。此外,用主键值搜索特定行Ӟq可使用 DataRowCollection ?span class="Apple-converted-space"> Find Ҏ(gu)?

DataTable 对象?span class="Apple-converted-space"> Select Ҏ(gu)q回一l与指定条g匚w?span class="Apple-converted-space"> DataRow 对象?strong>Select 采用{选表辑ּ、排序表辑ּ?span class="Apple-converted-space"> DataViewRowState 的可选参数。筛选表辑ּҎ(gu) DataColumn |例如 LastName = 'Smith'。排序表辑ּ遵@用于为列排序的标?SQL U定Q例?span class="Apple-converted-space"> LastName ASC, FirstName ASC。有关编写表辑ּ的规则,请参?strong>DataColumn  Expression 属性?/p>

提示 如果(zhn)将?span class="Apple-converted-space"> DataTable ?span class="Apple-converted-space"> Select Ҏ(gu)执行多次调用Q可通过先ؓ(f) DataTable 创徏 DataView来提高性能。创?span class="Apple-converted-space"> DataView ?x)?f)表中的行~制索引。然后,Select Ҏ(gu)?x)用该索引Q这样将显著~短生成查询l果的时间。有关ؓ(f) DataTable 创徏 DataView 的信息,请参?a style="color: rgb(51,102,153); text-decoration: none" >创徏和?DataView?/blockquote>

Select Ҏ(gu)Z DataViewRowState 定要查看或操作的行的版本。下表说明了可能?span class="Apple-converted-space"> DataViewRowState 枚D倹{?/p>

成员名称 说明
CurrentRows 当前行,包括未更改的行、已d的行和已修改的行?/td>
Deleted 已删除的行?/td>
ModifiedCurrent 当前版本Q它是原始数据的修改版本Q请参阅ModifiedOriginalQ?/td>
ModifiedOriginal 所有已修改行的原始版本。?span class="Apple-converted-space"> ModifiedCurrent Ӟ当前版本可用?/td>
Added 新行?/td>
None 无?/td>
OriginalRows 原始行,包括未更改的行和已删除的行?/td>
Unchanged 未更改的行?/td>

在下面的CZ中,DataSet 对象已经q筛选,q样Q?zhn)可以只用?span id="wmqeeuq" class="Apple-converted-space"> DataViewRowState 讄?span class="Apple-converted-space"> CurrentRows的行?/p>

DataRow[] currRows = workTable.Select(null, null, DataViewRowState.CurrentRows);

if (currRows.Length < 1 )
  Console.WriteLine("No Current Rows Found");
else
{
  foreach (DataColumn myCol in workTable.Columns)
    Console.Write("/t{0}", myCol.ColumnName);

  Console.WriteLine("/tRowState");

  foreach (DataRow myRow in currRows)
  {
    foreach (DataColumn myCol in workTable.Columns)
      Console.Write("/t{0}", myRow[myCol]);

    Console.WriteLine("/t" + myRow.RowState);
  }
}

Select Ҏ(gu)可用于返回具有不?span class="Apple-converted-space"> RowState 值或字段值的行。以下示例返回一个引用所有已删除行的 DataRow数组Qƈq回另一个引用所有已排序行(按照 CustLName 排序Q其?span class="Apple-converted-space"> CustID 列大?5Q的 DataRow 数组?/p>

// Retrieve all deleted rows.
DataRow[] delRows = workTable.Select(null, null, DataViewRowState.Deleted);

// Retrieve rows where CustID > 5, and order by CustLName.
DataRow[] custRows = workTable.Select("CustID > 5", "CustLName ASC");

~辑表中的数?/font>:说明如何修改行中的数据,包括挂v对行的更改,直至验证q接受了的更攏V?/p>
当?zhn)?span class="Apple-converted-space"> DataRow 中更改列值时Q所做更改会(x)立即|于行的 Current 状态中。然后,RowState ?x)设|ؓ(f)ModifiedQƈ使用 DataRow ?span class="Apple-converted-space"> AcceptChanges ?span class="Apple-converted-space"> RejectChanges Ҏ(gu)来接受或拒绝所做更攏V?strong>DataRowq提供了三种可用于在~辑行时行的状态挂L(fng)Ҏ(gu)。这些方法是 BeginEdit?strong>EndEdit ?span class="Apple-converted-space"> CancelEdit?

当?zhn)直接?span class="Apple-converted-space"> DataRow 中修改列值时Q?strong>DataRow ?x)?span class="Apple-converted-space"> Current?strong>Default ?span class="Apple-converted-space"> Original 行版本来理列倹{除q些行版本以外,BeginEdit?strong>EndEdit ?span class="Apple-converted-space"> CancelEdit Ҏ(gu)q用第四个行版本:(x)Proposed?/p>

在执行编辑操作(通过调用 BeginEdit 开始,q且通过使用 EndEdit ?span class="Apple-converted-space"> CancelEdit 或者通过调用AcceptChanges ?span class="Apple-converted-space"> RejectChanges l束Q的q程中,Proposed 行版本会(x)存在?/p>

在编辑操作过E中Q?zhn)可以通过计算 DataTable ?span class="Apple-converted-space"> ColumnChanged 事g中的 ProposedValue 来将验证逻辑应用于各列?strong>ColumnChanged 事g保存 DataColumnChangeEventArgsQ可保持Ҏ(gu)在更改的列和ProposedValue 的引用。计了值后Q可以对其进行修Ҏ(gu)取消~辑。编辑结束时Q行?span class="Apple-converted-space"> Proposed 状态中Ud?/p>

(zhn)可以通过调用 EndEdit 来确认编辑,也可以通过调用 CancelEdit 来取消编辑。请注意Q尽?span class="Apple-converted-space"> EndEdit 实已确认?zhn)所做的~辑Q但在调?span class="Apple-converted-space"> AcceptChanges 之前Q?strong>DataSet q没有实际接受更攏V另外请注意Q如果在EndEdit ?span class="Apple-converted-space"> CancelEdit ~辑l束之前调用 AcceptChangesQ编辑将?x)终止,q接?span class="Apple-converted-space"> Current ?span class="Apple-converted-space"> Original 行版本的 Proposed 行倹{调?span class="Apple-converted-space"> RejectChanges ?x)以同样的方式结束编辑,q放?span class="Apple-converted-space"> Current ?span class="Apple-converted-space"> Proposed 行版本。在调用 AcceptChanges ?span class="Apple-converted-space"> RejectChanges 之后调用 EndEdit ?span class="Apple-converted-space"> CancelEdit 不会(x)起作用,因ؓ(f)~辑已经l束?/p>

以下CZ演示了如何将 BeginEdit ?span class="Apple-converted-space"> EndEdit ?span class="Apple-converted-space"> CancelEdit 一起用。本CZ也会(x)?span class="Apple-converted-space"> ColumnChanged 事g中的 ProposedValueQƈ军_是否取消~辑?/p>

DataTable  workTable  = new DataTable();
workTable.Columns.Add("LastName", typeof(String));

workTable.ColumnChanged += new DataColumnChangeEventHandler(OnColumnChanged);

DataRow workRow = workTable.NewRow();
workRow[0] = "Smith";
workTable.Rows.Add(workRow);

workRow.BeginEdit();
// Causes the ColumnChanged event to write a message and cancel the edit.
workRow[0] = "";     
workRow.EndEdit();

// Displays "Smith, New".
Console.WriteLine("{0}, {1}", workRow[0], workRow.RowState);  


protected static void OnColumnChanged(Object sender, DataColumnChangeEventArgs args)
{
  if (args.Column.ColumnName == "LastName")
    if (args.ProposedValue.ToString() == "")
    {
      Console.WriteLine("Last Name cannot be blank. Edit canceled.");
      args.Row.CancelEdit();
    }
}

行状态与行版?/font>:提供有关行的不同状态的信息?/p>
ADO.NET 用行状态和版本理表中的行。行状态表C的状态。当修改行时Q行版本?x)维护存储于行中的|包括当前倹{原始值和默认倹{例如,修改了某行中的一列后Q该行会(x)有一?span class="Apple-converted-space"> Modified 的行状态,q且?x)存在两个行版本Q?strong>CurrentQ包含当前行|?span class="Apple-converted-space"> OriginalQ包含修改该列前的行|?

每个 DataRow 对象都具?span class="Apple-converted-space"> RowState 属性,(zhn)可以检查此属性来定行的当前状态。下表给Z对各RowState 枚D值的要说明?/p>

RowState 说明
Unchanged 自上ơ调?span class="Apple-converted-space"> AcceptChanges 之后Q或?span class="Apple-converted-space"> DataAdapter.Fill 创徏了行之后Q未做出qQ何更攏V?/td>
Added 已将行添臌中,但尚未调?span class="Apple-converted-space"> AcceptChanges?/td>
Modified 已更改了行的一些元素?/td>
Deleted 已将该行从表中删除,q且未调用 AcceptChanges?/td>
Detached 对于已经创徏但不属于M DataRowCollection 的行Q设|ؓ(f) Detached。新?span class="Apple-converted-space"> RowState讄?span class="Apple-converted-space"> Detached。通过调用 Add Ҏ(gu)新?span class="Apple-converted-space"> DataRow 添至 DataRowCollection 之后Q?strong>RowState 属性的D|ؓ(f) Added?

对于已经使用 Remove Ҏ(gu)Q或是在使用 Delete Ҏ(gu)之后使用?span class="Apple-converted-space"> AcceptChanges Ҏ(gu)Q从DataRowCollection 中移除的行,也设|ؓ(f) Detached?/p>

?span class="Apple-converted-space"> DataSet?strong>DataTable ?span class="Apple-converted-space"> DataRow 上调?span class="Apple-converted-space"> AcceptChanges Ӟ?x)移除行状态ؓ(f) Deleted 的所有行。剩余的行会(x)被赋?span class="Apple-converted-space"> Unchanged 行状态,q且 Original 行版本中的g(x)改写?span class="Apple-converted-space"> Current 行版本倹{调?strong>RejectChanges Ӟ?x)移除行状态ؓ(f) Added 的所有行。剩余的行会(x)被赋?span class="Apple-converted-space"> Unchanged 的行状态,q且Current 行版本中的g(x)改写?span class="Apple-converted-space"> Original 行版本倹{?/p>

通过用列引用来传?span class="Apple-converted-space"> DataRowVersion 参数Q?zhn)可以查看行的不同行版本,如下例所C?/p>

DataRow custRow = custTable.Rows[0];
string custID = custRow["CustomerID", DataRowVersion.Original].ToString();

下表l出了各 DataRowVersion 枚D值的要说明?/p>

DataRowVersion 说明
Current 行的当前倹{如果是?span class="Apple-converted-space"> Deleted ?span class="Apple-converted-space"> RowState 的行Q则不存在此行版本?/td>
Default 特定行的默认行版本?strong>Added?strong>Modified ?span class="Apple-converted-space"> Unchanged 行的默认行版本是Current?strong>Deleted 行的默认行版本是 Original?strong>Detached 行的默认行版本是 Proposed?/td>
Original 行的原始倹{如果是?span class="Apple-converted-space"> Added ?span class="Apple-converted-space"> RowState 的行Q则不存在此行版本?/td>
Proposed 行的倹{在对行q行~辑操作期间Q或对于不属?span class="Apple-converted-space"> DataRowCollection 的行Q存在此行版本?/td>

通过调用 HasVersion Ҏ(gu)q将 DataRowVersion 作ؓ(f)参数传递,(zhn)可以测?span class="Apple-converted-space"> DataRow 是否h特定的行版本。例如,在调?span class="Apple-converted-space"> AcceptChanges 之前Q?code class="ce">DataRow.HasVersion(DataRowVersion.Original) Ҏ(gu)d的行返?span class="Apple-converted-space"> false?/p>

例如Q以下代码示例显CZ表中所有已删除行的倹{已删除的行没有 Current 行版本,因此在访问列值时必须传?span class="Apple-converted-space"> DataRowVersion.Original?/p>

DataTable catTable = catDS.Tables["Categories"];

DataRow[] delRows = catTable.Select(null, null, DataViewRowState.Deleted);

Console.WriteLine("Deleted rows:/n");

foreach (DataColumn catCol in catTable.Columns)
  Console.Write(catCol.ColumnName + "/t");
Console.WriteLine();

foreach (DataRow delRow in delRows)
{
  foreach (DataColumn catCol in catTable.Columns)
    Console.Write(delRow[catCol, DataRowVersion.Original] + "/t");
  Console.WriteLine();
}

从表中删除行:说明如何从表中移除行?/p>
用于?span class="Apple-converted-space"> DataTable 对象中删?span class="Apple-converted-space"> DataRow 对象的方法有两种Q?strong>DataRowCollection 对象?span class="Apple-converted-space"> Remove Ҏ(gu)?strong>DataRow 对象?span class="Apple-converted-space"> Delete Ҏ(gu)?strong>Remove Ҏ(gu)?span class="Apple-converted-space"> DataRowCollection 中删?span class="Apple-converted-space"> DataRowQ?span class="Apple-converted-space"> Delete Ҏ(gu)只将行标Cؓ(f)删除。当应用E序调用 AcceptChanges Ҏ(gu)Ӟ才会(x)发生实际的删除。通过使用 DeleteQ?zhn)可以在实际删除之前先以编E方式检查哪些行标记为删除。如果将行标Cؓ(f)删除Q其 RowState 属性会(x)讄?span class="Apple-converted-space"> Deleted?

在将 DataSet ?span class="Apple-converted-space"> DataTable ?span class="Apple-converted-space"> DataAdapter 和关pd数据源一起用时Q用 DataRow ?span class="Apple-converted-space"> Delete Ҏ(gu)U除行?strong>Delete Ҏ(gu)只是?span class="Apple-converted-space"> DataSet ?span class="Apple-converted-space"> DataTable 中将行标Cؓ(f) DeletedQ而不?x)移除它。?span class="Apple-converted-space"> DataAdapter 在遇到标Cؓ(f) Deleted 的行Ӟ?x)执行?span id="wmqeeuq" class="Apple-converted-space"> DeleteCommand 以在数据源中删除该行。然后,可以用AcceptChanges Ҏ(gu)怹U除该行。如果?span class="Apple-converted-space"> Remove 删除该行Q则该行从表中完全U除Q但DataAdapter 不会(x)在数据源中删除该行?/p>

DataRowCollection ?span class="Apple-converted-space"> Remove Ҏ(gu)采用 DataRow 作ؓ(f)参数Qƈ其从集合中U除Q如下例所C?/p>

workTable.Rows.Remove(workRow);

作ؓ(f)Ҏ(gu)Q以下示例演CZ如何调用 DataRow 上的 Delete Ҏ(gu)来将?span class="Apple-converted-space"> RowState 改ؓ(f) Deleted?/p>

workRow.Delete();

如果行标记为删除,q且调用 DataTable 对象?span class="Apple-converted-space"> AcceptChanges Ҏ(gu)Q该行就?x)?span id="wmqeeuq" class="Apple-converted-space"> DataTable 中移除。相比之下,如果调用 RejectChangesQ行?span class="Apple-converted-space"> RowState ׃(x)恢复到被标记?span class="Apple-converted-space"> Deleted 之前的状态?/p>

注意 如果 DataRow ?span class="Apple-converted-space"> RowState ?span class="Apple-converted-space"> AddedQ则意味着已将其添臌中,然后其标记?strong>DeletedQ从表中U除?/blockquote>

d和读取行错误信息:说明如何按行插入错误信息Q以用于解决有关应用E序内行中数据的问题?/p>
Z避免在编?span class="Apple-converted-space"> DataTable 中的值时每次发生行错误都必须响应Q可错误信息添臌中,以便以后使用?strong>DataRow 对象通过对各行提?span class="Apple-converted-space"> RowError 属性来支持此功能。将数据添至 DataRow ?span class="Apple-converted-space"> RowError 属性会(x)?strong>DataRow ?span class="Apple-converted-space"> HasErrors 属性标Cؓ(f) true。如?span class="Apple-converted-space"> DataRow ?span class="Apple-converted-space"> DataTable 的组成部分,?span class="Apple-converted-space"> DataRow.HasErrors?span class="Apple-converted-space"> trueQ则 DataTable.HasErrors 属性也?span class="Apple-converted-space"> true。这也适用?span class="Apple-converted-space"> DataTable 所属的 DataSet。ؓ(f)错误做测试时Q可以检?span class="Apple-converted-space"> HasErrors 属性以定错误信息是否已添x有行。如?span class="Apple-converted-space"> HasErrors ?span class="Apple-converted-space"> trueQ则可?span class="Apple-converted-space"> DataTable ?strong>GetErrors Ҏ(gu)以便只返回和查有错误的行Q如下例所C?

DataTable  workTable = new DataTable("Customers");
workTable.Columns.Add("CustID", typeof(Int32));
workTable.Columns.Add("Total", typeof(Double));

workTable.RowChanged += new DataRowChangeEventHandler(OnRowChanged);

for (int i = 0; i < 10; i++)
  workTable.Rows.Add(new Object[] {i, i*100});

if (workTable.HasErrors)
{
  Console.WriteLine("Errors In Table " + workTable.TableName);

  foreach (DataRow myRow in workTable.GetErrors())
  {
    Console.WriteLine("CustID = " + myRow["CustID"]);
    Console.WriteLine(" Error = " + myRow.RowError + "/n");
  }
}

protected static void OnRowChanged(Object sender, DataRowChangeEventArgs args)
{
  // Check for zero values.
  if (args.Row["Total"].Equals(0D))
    args.Row.RowError = "Total cannot be 0.";
}

接受或拒l对行的更改:说明如何接受或拒l对行的更改?/p>
在检验过?span class="Apple-converted-space"> DataTable 中的数据所做更改的准确性之后,可?span class="Apple-converted-space"> DataRow?strong>DataTable ?span class="Apple-converted-space"> DataSet ?strong>AcceptChanges Ҏ(gu)来接受更改,此方法会(x)?span class="Apple-converted-space"> Current 行D|ؓ(f) Original |q会(x)?span class="Apple-converted-space"> RowState 属性设|ؓ(f) Unchanged。接受或拒绝更改?x)清除所?span class="Apple-converted-space"> RowError 信息Qƈ?span class="Apple-converted-space"> HasErrors 属性设|ؓ(f) false。接受或拒绝更改q可以媄响在数据源中更新数据。有x多信息,请参?a style="color: rgb(51,102,153); text-decoration: none" >使用 DataAdapter ?DataSet 更新数据?/a>?

如果 DataTable 上存在外键约束,使用 AcceptChanges ?span class="Apple-converted-space"> RejectChanges 接受或拒l的更改׃(x)Ҏ(gu)ForeignKeyConstraint.AcceptRejectRule 传播?span class="Apple-converted-space"> DataRow 的子行?/p>

以下CZ查有错误的行Q在适用之处解决错误Q拒l无法解决错误的行。请注意Q对于解决的错误Q?strong>RowErrorg(x)重置为空字符ԌD?span class="Apple-converted-space"> HasErrors 属性设|ؓ(f) false。当解决或拒l了所有的有错误的行时Q就?x)调?strong>AcceptChanges 来接受对整个 DataTable 的所有更攏V?/p>

if (workTable.HasErrors)
{

  foreach (DataRow errRow in workTable.GetErrors())
  {
    if (errRow.RowError == "Total cannot exceed 1000.")
    {
      errRow["Total"] = 1000;
      errRow.RowError = "";    // Clear the error.
    }
    else
      errRow.RejectChanges();
  }
}

workTable.AcceptChanges();

处理 DataTable 事g:提供可用?span class="Apple-converted-space"> DataTable 的事件的相关信息Q包括修改列值和d或删除行时的事g?/p>
DataTable 对象提供一pd可由应用E序处理的事件。下表说明了 DataTable 事g?
事g 说明
ColumnChanged 在值已成功插入列时发生?/td>
ColumnChanging 在已提交列值时发生?/td>
RowChanged 在已成功~辑表中的行后发生?/td>
RowChanging 当正在更改表中的行时发生?/td>
RowDeleted 在表中的某行已被标记?span class="Apple-converted-space"> Deleted 之后发生?/td>
RowDeleting 在表中的某行被标Cؓ(f) Deleted 之前发生?/td>

以下CZ创徏 4 个事Ӟ(x)OnColumnChanged?strong>OnColumnChanging?strong>OnRowChanged ?strong>OnRowChanging。这些事件中的每一个都在列或行更改时发生?/p>

workTable.ColumnChanged  += new DataColumnChangeEventHandler(OnColumnChanged);
workTable.ColumnChanging += new DataColumnChangeEventHandler(OnColumnChanging);
workTable.RowChanged     += new DataRowChangeEventHandler(OnRowChanged);
workTable.RowChanging    += new DataRowChangeEventHandler(OnRowChanging);

protected static void OnColumnChanged(object sender, DataColumnChangeEventArgs args)
{
  Console.Write(" ColumnChanged: ");
  Console.Write(args.Column.ColumnName + " changed to '" + args.ProposedValue + "'/n");
}

protected static void OnColumnChanging(object sender, DataColumnChangeEventArgs args)
{
  Console.Write("ColumnChanging: ");
  Console.Write(args.Column.ColumnName + " equals '" + args.Row[args.Column] + 
                    "', changing to '" + args.ProposedValue + "'/n");    
}

protected static void OnRowChanging(object sender, DataRowChangeEventArgs args)
{
  if (args.Action != DataRowAction.Nothing)
    Console.WriteLine("   RowChanging: Action = " + args.Action + ", CustID = " + args.Row["CustID"]);
}

protected static void OnRowChanged(object sender, DataRowChangeEventArgs args)
{
  if (args.Action != DataRowAction.Nothing)
    Console.WriteLine("    RowChanged: Action = " + args.Action + ", CustID = " + args.Row["CustID"]);
}



Ke 2014-06-30 11:08 发表评论
]]>
Combobox出现System.Data.DataRowView的原因,以及(qing)指定ValueMember的时机问?http://www.aygfsteel.com/keweibo/articles/396365.htmlKeKeWed, 13 Mar 2013 03:11:00 GMThttp://www.aygfsteel.com/keweibo/articles/396365.htmlhttp://www.aygfsteel.com/keweibo/comments/396365.htmlhttp://www.aygfsteel.com/keweibo/articles/396365.html#Feedback0http://www.aygfsteel.com/keweibo/comments/commentRss/396365.htmlhttp://www.aygfsteel.com/keweibo/services/trackbacks/396365.html转自Q?a >http://blog.csdn.net/lubiaopan/article/details/5915774

当?/span>Combobox控gӞ出现SelectedValue的gؓ(f)“System.Data.DataRowView”的原因有两个Q?span style="color: #ff0000">在Combobox的DataSource不ؓ(f)I的情况?/strong>Q要么是没有?/span>ValueMember赋|要么是赋D错了Q这两种情况下系l就?x)?/span>SelectedValue的默认D出来Q注意红色部分,如果DataSource为空Q那么SelectedValue的gؓ(f)nullQ?/span>。但有时即你对ValueMember赋了正确的g?x)出现这个问题,q里有一个赋值时机选择的问题,L(fng)下面的示例:(x)

       首先Q构造如下所C的一个窗?/span>:

      

H体有一个下拉框Q名?/span>Combobox1Q还有一个文本框Q名?/span>TextBox1Q功能很单,当选择下拉框的某一的时候,把该选择对应的ValueMember的值显C到文本框中。下面是实现该功能的核心代码Q?/span>

Code-1Q?/strong>

  1. namespace FrmForTest  
  2. {  
  3.     public partial class Form1 : Form  
  4.     {  
  5.         public Form1()  
  6.         {  
  7.             InitializeComponent();  
  8.             this.InitialCombobox();  
  9.         }  
  10.   
  11.         private void InitialCombobox()  
  12.         {  
  13.             DataTable table = new DataTable();  
  14.             DataColumn column;  
  15.             DataRow row;  
  16.   
  17.             column = new DataColumn("Name");  
  18.             table.Columns.Add(column);  
  19.   
  20.             column = new DataColumn("Value");  
  21.             table.Columns.Add(column);  
  22.   
  23.             for (int i = 0; i < 5; i++)  
  24.             {  
  25.                 row = table.NewRow();  
  26.                 row["Name"] = "Test" + i;  
  27.                 row["Value"] = i.ToString();  
  28.                 table.Rows.Add(row);  
  29.             }  
  30.   
  31.             this.comboBox1.DataSource = table;  
  32.             this.comboBox1.DisplayMember = "Name";  
  33.             this.comboBox1.ValueMember = "Value";  
  34.         }  
  35.   
  36.         private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)  
  37.         {  
  38.             this.textBox1.Text = this.comboBox1.SelectedValue.ToString();  
  39.         }  
  40.     }  
  41. }  

 

 

q行上面的代码,H体初始化完毕后输出的结果如下:(x)

 

文本框显C的?#8220;System.Data.DataRowView”Q前面说q,只有在没有ؓ(f)Combobox指定ValueMember的值或指定错的情况下才?x)是该字W串Q可E序已经正确指定?/span>ValueMemberZ么还是这个结果呢Q我试着选择其他的下拉项Q发现显C的l果变成了预想的|原因何在Q?/span>

       仔细观察E序发现原因在于ValueMember赋值的时机Q上面的代码当执行完DataSource赋D句之后,触发?/span>事gQ而此时还未指定ValueMemberQ所以窗体初ơ初始化后显C的?/span>System.Data.DataRowView”Q?/span>解决Ҏ(gu)很简单:(x)只需?/span>DataSource赋D句放?/span>DisplayMember?/span>ValueMember语句之后?/span>

好,q个问题解决了,新的问题又来了,L(fng)下面的描qͼ(x)

SelectedIndexChanged替换为SelectedValueChangedQ会(x)是什么效果呢Q试了一下,没有报错Qƈ且窗体初始化完毕后显C的是预期的?。呵呵,又找C一U解x法。问题还没完Q请接着往下看Q?/span>

上面SelectedValueChanged的试验中QDataSource是在DisplayMember?/span>ValueMember前面的,如果攑ֈ它们两个后面呢?l箋试Q这ơ报错了——“未将对象引用到对象的CZ”Q对E序q行跟踪Q当执行完this.comboBox1.ValueMember = "Value"语句之后Q程序{CcomboBox1_SelectedIndexChangedҎ(gu)Q在this.textBox1.Text = this.comboBox1.SelectedValue.ToString();语句处报错,SelectedValue的gؓ(f)I,因ؓ(f)此时q没有给DataSource赋|所以报q个错?/span>

现在可以ȝ了,当?span style="font-family: 新宋?>SelectedIndexChangedӞValueMember在DataSource前进行赋|当用SelectedValueChangedӞValueMember在DataSource后进行赋倹{?/strong>

q有一个问题很有意思,如下所C:(x)

this.comboBox1.DisplayMember = "Name";

this.comboBox1.ValueMember = "ValueError";

   this.comboBox1.DataSource = table;

System.Data.DataRowViewQ然后我们对q三行代码的序做一下调_(d)如下Q?/span>

   this.comboBox1.DataSource = table;

this.comboBox1.DisplayMember = "Name";

this.comboBox1.ValueMember = "ValueError";

上面ValueMember的g旧是错的Q但是对其赋值操作放CDataSource语句之后Q运行程序,在ValueMember赋D句处报错如下Q?span style="color: red">“无法l定到值成?/span>”?/span>

当指定了DataSource的值后再对ValueMember赋错Q如果此时赋D错的话,q行时就?x)报错,如果是在DataSource语句之前对ValueMember赋值则不会(x)报错Q大家在应用的时候一定要注意?/span>



Ke 2013-03-13 11:11 发表评论
]]>
c++调用c#的dllQ{Q?http://www.aygfsteel.com/keweibo/articles/396322.htmlKeKeTue, 12 Mar 2013 07:13:00 GMThttp://www.aygfsteel.com/keweibo/articles/396322.htmlhttp://www.aygfsteel.com/keweibo/comments/396322.htmlhttp://www.aygfsteel.com/keweibo/articles/396322.html#Feedback0http://www.aygfsteel.com/keweibo/comments/commentRss/396322.htmlhttp://www.aygfsteel.com/keweibo/services/trackbacks/396322.html一、?clr~译MFC可执行文件或规则C(j)# DLL函数.
    1、打开“目属?#8221;对话框,Ҏ(gu)是右键单?#8220;解决Ҏ(gu)资源理?#8221;中的目q择“属?#8221;?br />    2、展开“配置属?#8221;旁边的节点ƈ选择“常规”。在右侧H格中的“目默认?#8221;下,?#8220;公共语言q行库支?#8221;讄?strong>“公共语言q行库支持(/clrQ?#8221;?br />
    3、在相同的窗gQ确保将“MFC的?#8221;讄?#8220;在共享DLL中用MFC”?br />    4、在“配置属?#8221;下,展开“C/C++”旁边的节点ƈ选择“常规”。请保?#8220;调试信息格式”讄?#8220;E序数据?Zi”Q而不?#8220;/ZI”Q?br />    5、在“配置属?#8221;下,选择“C/C++”Q然后选择“代码生成”。请保?#8220;q行时库”讄?#8220;多线E调试DLLQ?MDdQ?#8221;?#8220;多线EDLLQ?MDQ?#8221;之一?br />二、在代码引用需要的dll.
 using <mscorlib.dll>. 
 using "DownloaFiles.dll"   //换成需要的dll文g?/strong> 
 using namespace SystemQ?
 using namespace ADMessage_testQ?nbsp; //换成dll中类所使用的namespace.
三、在C# DLL函数调用代码前加?pragma managed
    q是manage和unmanage混合~程在MFC下的一U实现方式?br />    以上介绍C++调用C# DLL函数Q希望对你有所帮助?/p>

?、几点要CQ?/p>

  1 使用#using引用C# DLLQ而不?include.我就是想当然的用了后者,所以浪费了一上午的时_(d)

  2 别忘了using namespace CSLibQ?/p>

  3 使用C++/clr语法Q采用正的讉K托管对象Q即Q用帽?#8216;^’Q而不是星?#8216;*’?br />

PSQ附上自己成功运行C++代码

#include "stdafx.h"
#include <iostream>
//#using "..\..\SFCSDLL.dll" //叛_目-->引用...Q添加新引用Q将DLLd到项目中Q可以不用此行代?/p>

using namespace std;
using namespace SFCSDLL;

int _tmain(int argc, _TCHAR* argv[])
{
 Class1 ^c = gcnew Class1();

 c->SFCSDLL_Create_Connection("127.0.0.1", 0, 0, 0, 0);
 c->SFCSDLL_Get_DLLVersion();
 c->SFCSDLL_Close_Connection();

 cout<<"end...";
 system("pause");
 return 0;
}

 



Ke 2013-03-12 15:13 发表评论
]]>C# DataGridView昄行号的方?/title><link>http://www.aygfsteel.com/keweibo/articles/392802.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Tue, 11 Dec 2012 06:54:00 GMT</pubDate><guid>http://www.aygfsteel.com/keweibo/articles/392802.html</guid><wfw:comment>http://www.aygfsteel.com/keweibo/comments/392802.html</wfw:comment><comments>http://www.aygfsteel.com/keweibo/articles/392802.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/keweibo/comments/commentRss/392802.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/keweibo/services/trackbacks/392802.html</trackback:ping><description><![CDATA[<div class="wmqeeuq" id="content" class="content mod-cs-content text-content clearfix"> <div> <p><span>|上最常见的做法是?/span><span>DataGridView</span><span>?/span><span>RowPostPaint</span><span>事g?/span><span>RowHeaderCell</span><span>中绘制行P(x)</span></p> <p><span>private</span><span>void</span><span>dataGridView1_RowPostPaint(</span><span>object</span><span>sender, DataGridViewRowPostPaintEventArgs e)<br />         {<br />            </span><span>try</span><span><br />             {</span></p> <p><span>       e.Graphics.DrawString((e.RowIndex + 1).ToString(), e.InheritedRowStyle.Font, new SolidBrush(Color.CadetBlue), e.RowBounds.Location.X + 15, e.RowBounds.Location.Y + 5);<br />             </span><span>}<br />            </span><span>catch</span><span>(Exception ex)<br />             {<br />                 MessageBox.Show(</span><span>"</span><span>d行号时发生错误,错误信息Q?/span><span>"</span><span>+</span><span>ex.Message, </span><span>"</span><span>操作p|</span><span>"</span><span>);<br />             }<br />         }<br /></span></p> <p><strong><span>但是q种Ҏ(gu)在大数据量的时候性能比较差,每次滚动数据都会(x)触发</span><span>RowPostPaint</span><span>事g?/span></strong></p></div></div><img src ="http://www.aygfsteel.com/keweibo/aggbug/392802.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/keweibo/" target="_blank">Ke</a> 2012-12-11 14:54 <a href="http://www.aygfsteel.com/keweibo/articles/392802.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VS2008 自动生成属性的get、set http://www.aygfsteel.com/keweibo/articles/391417.htmlKeKeFri, 16 Nov 2012 01:34:00 GMThttp://www.aygfsteel.com/keweibo/articles/391417.htmlhttp://www.aygfsteel.com/keweibo/comments/391417.htmlhttp://www.aygfsteel.com/keweibo/articles/391417.html#Feedback0http://www.aygfsteel.com/keweibo/comments/commentRss/391417.htmlhttp://www.aygfsteel.com/keweibo/services/trackbacks/391417.html

在VS2008里,也可以像Eclipse那样自动生成get 、setҎ(gu)?br />
下面是两个具体操作的Ҏ(gu)Q?br />

1、在~写的字D上单击右键----->重构------->装字段

2、在I白行处Q输?#8220;prop”再按Tab?/p>

Ke 2012-11-16 09:34 发表评论
]]>
VS中C#dapp.config数据库配|字W串的三U方??http://www.aygfsteel.com/keweibo/articles/391207.htmlKeKeMon, 12 Nov 2012 07:42:00 GMThttp://www.aygfsteel.com/keweibo/articles/391207.htmlhttp://www.aygfsteel.com/keweibo/comments/391207.htmlhttp://www.aygfsteel.com/keweibo/articles/391207.html#Feedback0http://www.aygfsteel.com/keweibo/comments/commentRss/391207.htmlhttp://www.aygfsteel.com/keweibo/services/trackbacks/391207.htmlhttp://hi.baidu.com/mindox/item/3278dc352c7ba68fb80c0389

关于VS2008或VS2005中数据库配置字符串的三种取法
VS2008建立FormE序?如果d数据源会(x)在配|文?app.config中自动写入连接字W串,q个字符串将?x)在你利用DataSet,SqlDataAparter,SqlConnection{控件时如媄随行地提CZ让去选择,或者是新徏字符丌Ӏ如果要用代码的方式取得q个字符串则有三U方式:(x)

app.config内容Q?/p>

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
    </configSections>
<appSettings>
    <add key="connectionstring" value="Data Source=你的数据库器Q本机可用LocalHost,如果是EXPRESS开发版则必L.\SQLEXPRESS);Initial Catalog=数据库名?User ID=用户?Password=你自q密码 />
    <add key="TemplatePATH" value="Template" />
</appSettings>
<connectionStrings>
        <add name="SxzzManager.Properties.Settings.sxzzConnectionString"
            connectionString="Data Source=你的数据库器;Initial Catalog=数据库名?User ID=sa;Password=你自q密码"
            providerName="System.Data.SqlClient" />
        <add name="TestConnectionString" connectionString="Data Source=你的数据库器;Initial Catalog=数据库名?User ID=sa;Password=你自q密码"
            providerName="System.Data.SqlClient" />
   </connectionStrings>
</configuration>

说明Q?br />其中
??br /><appSettings>
    <add key="connectionstring" value="Data Source=你的数据库器Q本机可用LocalHost,如果是EXPRESS开发版则必L.\SQLEXPRESS);Initial Catalog=数据库名?User ID=用户?Password=你自q密码 />
    <add key="TemplatePATH" value="Template" />
</appSettings>
为手工所加?br />??br />        <add name="SxzzManager.Properties.Settings.sxzzConnectionString"
            connectionString="Data Source=你的数据库器;Initial Catalog=数据库名?User ID=sa;Password=你自q密码"
            providerName="System.Data.SqlClient" />
为在VS2008中添加数据源时自动生成的内容?br />??br />        <add name="TestConnectionString" connectionString="Data Source=你的数据库器;Initial Catalog=数据库名?User ID=sa;Password=你自q密码"
            providerName="System.Data.SqlClient" />
为手工添加?br />要取得?》中所C的q接字符串用如下语句Q?br />         string ConString = System.Configuration.ConfigurationSettings.AppSettings["connectionstring"];

        string ConString = System.Configuration.ConfigurationManager.AppSettings["connectionstring"];

要取得?》中所C的q接字符串有两种Ҏ(gu)
           <1>:       string constr = System.Configuration.ConfigurationManager.ConnectionStrings["SxzzManager.Properties.Settings.sxzzConnectionString"].ToString();
           <2>:        string constr = SxzzManager.Properties.Settings.Default["sxzzConnectionString"].ToString();//"其中"sxzzConnectionString"可以在VS2008中菜单=》项目=》属性=》设|=》名U?nbsp;  弹出的对话框中显C。其实就?SxzzManager.Properties.Settings.sxzzConnectionString"中最后一个点后面的字W串?br />要取得?》中所C的q接字符串则中能用?》中的一个字W串
           string constr = ConfigurationManager.ConnectionStrings["TestConnectionString"].ToString();
           string constr = ConfigurationManager.ConnectionStrings["TestConnectionString"].ConnectionString;




补充Q如果VS不能识别ConfigurationManagerc,则需要在引用中添?#8220;System.Configuration”引用卛_

Ke 2012-11-12 15:42 发表评论
]]>
如何~写C(j)# Windows服务Q{Q?/title><link>http://www.aygfsteel.com/keweibo/articles/390464.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Tue, 30 Oct 2012 07:37:00 GMT</pubDate><guid>http://www.aygfsteel.com/keweibo/articles/390464.html</guid><wfw:comment>http://www.aygfsteel.com/keweibo/comments/390464.html</wfw:comment><comments>http://www.aygfsteel.com/keweibo/articles/390464.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/keweibo/comments/commentRss/390464.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/keweibo/services/trackbacks/390464.html</trackback:ping><description><![CDATA[转自Q?a >http://www.csharpwin.com/csharpspace/5575r154.shtml</a><br /><br />1、新建C# Windows服务Qwindows service工程 <p><a target="_blank"><img class="fit-image" border="0" alt="新徏windows service工程" src="http://www.csharpwin.com/upload/1548000.jpg" width="343" height="275" /></a></p> <p>    2、新建windows service工程后,pȝ自动生成一个Service1.cs文gQ默认是其设计视图。选择查看其代码,默认有构造函数、OnStart、OnStop三个函数Q如下图所C:(x)</p> <p><a target="_blank"><img class="fit-image" border="0" alt="设计视图" src="http://www.csharpwin.com/upload/1548001.jpg" width="342" height="162" /></a> </p> <p>   3、新ZC# Windows服务之后Q还要设|该服务q行的周期,左侧的ToolBox中有两个timmerQ一个在lg下,一个在windows form下,可惜<span style="color: red"><strong>q两个都不能?/strong></span>Q我们要手工新徏一个timmerQƈ讄其属性和事g?/p><pre><ol class="dp-c"><li id="wmqeeuq" class="alt"><span id="wmqeeuq" class="keyword"><strong><font color="#006699">public</font></strong></span><span> WindowsServiceDemo()   </span></li><li><span>        {   </span></li><li id="wmqeeuq" class="alt"><span>            InitializeComponent();   </span></li><li><span>            System.Timers.Timer t = </span><span id="wmqeeuq" class="keyword"><strong><font color="#006699">new</font></strong></span><span> System.Timers.Timer(1000);</span><span id="wmqeeuq" class="comment"><font color="#008200">//实例化Timerc,讄间隔旉?0000毫秒Q?nbsp;  </font></span><span> </span></li><li id="wmqeeuq" class="alt"><span>            t.Elapsed += </span><span id="wmqeeuq" class="keyword"><strong><font color="#006699">new</font></strong></span><span> System.Timers.ElapsedEventHandler(TimeElapse);</span><span id="wmqeeuq" class="comment"><font color="#008200">//到达旉的时候执行事Ӟ   </font></span><span> </span></li><li><span>            t.AutoReset = </span><span id="wmqeeuq" class="keyword"><strong><font color="#006699">true</font></strong></span><span>;</span><span id="wmqeeuq" class="comment"><font color="#008200">//讄是执行一ơ(falseQ还是一直执?true)Q?nbsp;  </font></span><span> </span></li><li id="wmqeeuq" class="alt"><span>            t.Enabled = </span><span id="wmqeeuq" class="keyword"><strong><font color="#006699">true</font></strong></span><span>;</span><span id="wmqeeuq" class="comment"><font color="#008200">//是否执行System.Timers.Timer.Elapsed事gQ?nbsp; </font></span><span> </span></li><li><span>        }   </span></li><li id="wmqeeuq" class="alt"><span> </span></li><li><span> </span></li><li id="wmqeeuq" class="alt"><span id="wmqeeuq" class="keyword"><strong><font color="#006699">public</font></strong></span><span> </span><span id="wmqeeuq" class="keyword"><strong><font color="#006699">void</font></strong></span><span> TimeElapse(</span><span id="wmqeeuq" class="keyword"><strong><font color="#006699">object</font></strong></span><span> source, System.Timers.ElapsedEventArgs e)   </span></li><li><span>        {   </span></li><li id="wmqeeuq" class="alt"><span>            </span><span id="wmqeeuq" class="comment"><font color="#008200">//EventLog log = new EventLog();  </font></span><span> </span></li><li><span>            </span><span id="wmqeeuq" class="comment"><font color="#008200">//log.Source = "我的应用E序";  </font></span><span> </span></li><li id="wmqeeuq" class="alt"><span>            </span><span id="wmqeeuq" class="comment"><font color="#008200">//log.WriteEntry("1U调用一?, EventLogEntryType.Information);  </font></span><span> </span></li><li><span>            FileStream fs = </span><span id="wmqeeuq" class="keyword"><strong><font color="#006699">new</font></strong></span><span> FileStream(@</span><span id="wmqeeuq" class="string"><font color="#0000ff">"d:\timetick.txt"</font></span><span>, FileMode.OpenOrCreate, FileAccess.Write);   </span></li><li id="wmqeeuq" class="alt"><span>            StreamWriter m_streamWriter = </span><span id="wmqeeuq" class="keyword"><strong><font color="#006699">new</font></strong></span><span> StreamWriter(fs);   </span></li><li><span>            m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);   </span></li><li id="wmqeeuq" class="alt"><span>            m_streamWriter.WriteLine(</span><span id="wmqeeuq" class="string"><font color="#0000ff">"q了一U?nbsp;"</font></span><span> + DateTime.Now.ToString() + </span><span id="wmqeeuq" class="string"><font color="#0000ff">"\n"</font></span><span>);   </span></li><li><span>            m_streamWriter.Flush();   </span></li><li id="wmqeeuq" class="alt"><span>            m_streamWriter.Close();   </span></li><li><span>            fs.Close();   </span></li><li id="wmqeeuq" class="alt"><span>    </span></li><li><span>        }  </span></li></ol></pre> <p>   4、服务编写之后,q不能由SCM(服务控制理?q行理Q需要给该服务添加装载器。在Service1.cs的设计视图,点击右键Q选择“d装蝲?#8221;Q系l默认就?x)添加ProjectInstaller.csq个cR?/p> <p><a target="_blank"><img class="fit-image" border="0" alt="Service1.cs的设计视? src="http://www.csharpwin.com/upload/1548002.jpg" width="270" height="232" /></a>  </p> <p>    5、添加该cdQ在该类的设计视图上可看到serviceInstaller1和serviceProcessInstaller1Q分别设|其属性?/p> <p>    讄serviceInstaller1的运行方式ؓ(f)手动或者自?/p> <p>    讄serviceInstaller1的ServiceName,讄Z么,服务列表中就昄什?/p> <p>    讄serviceProcessInstaller1的运行̎号ؓ(f)LocalSystem</p> <p>    6、编译该工程</p> <p>    7、用vs自带的命令行工具Q运行installutil ~译生成的exe</p> <p>    8、在pȝ的服务中可看到我们创建的服务?/p> <p>    需要注意的?</p> <p>    如果你修改了q个服务Q\径没有变化的话是不需要重新注册服务的Q如果\径发生了变化Q需要先卸蝲q个服务<span style="color: red">InstallUtil.exe /u</span>参数Q然后再重新安装q个服务Q不能直接安装。还有就是C# Windows服务是没有界面的Q不要企囄控制的输出方式来输出一些信息,你只能添加一个EventLogQ通过WriteEntry()来写日志?br /></p><img src ="http://www.aygfsteel.com/keweibo/aggbug/390464.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/keweibo/" target="_blank">Ke</a> 2012-10-30 15:37 <a href="http://www.aygfsteel.com/keweibo/articles/390464.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>判断文g是否被占用(独n模式Q?/title><link>http://www.aygfsteel.com/keweibo/articles/390409.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Mon, 29 Oct 2012 08:45:00 GMT</pubDate><guid>http://www.aygfsteel.com/keweibo/articles/390409.html</guid><wfw:comment>http://www.aygfsteel.com/keweibo/comments/390409.html</wfw:comment><comments>http://www.aygfsteel.com/keweibo/articles/390409.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/keweibo/comments/commentRss/390409.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/keweibo/services/trackbacks/390409.html</trackback:ping><description><![CDATA[<p>try<br />            {<br />                using (File.Open(@"C:testfile.txt", FileMode.Open, FileAccess.ReadWrite, FileShare.None))<br />                {<br />                    <br />                }</p> <p>                MessageBox.Show("ok");<br />            }<br />            catch(Exception ex)<br />            {<br />                MessageBox.Show(ex.Message.ToString());<br />            }<br /><br />试代码Q?br /><br />使用File.Create(@"C:testfile.txt")创徏试文本文gQ没调用CloseQ)Ҏ(gu)释放?br />当执行上面的代码Ӟ?x)抛出异常,提示文g正在被用之cȝ异常信息?br /><br /><span style="color: red">针对在Window环境下,手动创徏TXT文档Qƈq行~辑Q不保存Q,以上判断代码不适用?/span></p><img src ="http://www.aygfsteel.com/keweibo/aggbug/390409.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/keweibo/" target="_blank">Ke</a> 2012-10-29 16:45 <a href="http://www.aygfsteel.com/keweibo/articles/390409.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>File.Create(path)创徏文g后需要调用Close()Ҏ(gu)释放http://www.aygfsteel.com/keweibo/articles/390257.htmlKeKeFri, 26 Oct 2012 03:40:00 GMThttp://www.aygfsteel.com/keweibo/articles/390257.htmlhttp://www.aygfsteel.com/keweibo/comments/390257.htmlhttp://www.aygfsteel.com/keweibo/articles/390257.html#Feedback0http://www.aygfsteel.com/keweibo/comments/commentRss/390257.htmlhttp://www.aygfsteel.com/keweibo/services/trackbacks/390257.html在操作系l中打开新徏的文件提C?#8220;正在被?#8221;的提CZ息?br />
//文g不存在则创徏
File.Create(strFilePath).Close();



Ke 2012-10-26 11:40 发表评论
]]>
使用 C# q行 label 打印 的两U方?(?http://www.aygfsteel.com/keweibo/articles/387627.htmlKeKeThu, 13 Sep 2012 03:26:00 GMThttp://www.aygfsteel.com/keweibo/articles/387627.htmlhttp://www.aygfsteel.com/keweibo/comments/387627.htmlhttp://www.aygfsteel.com/keweibo/articles/387627.html#Feedback0http://www.aygfsteel.com/keweibo/comments/commentRss/387627.htmlhttp://www.aygfsteel.com/keweibo/services/trackbacks/387627.html阅读全文

Ke 2012-09-13 11:26 发表评论
]]>
վ֩ģ壺 | ɽ| ¡| Ͳ| | ϲ| | | | ʹ| Ρɽ| ͷ| | | | | ̫| ͬ| | ̨| պ| | ɽ| ¤| | | ƽ| | | Ӧ| | | | | | Դ| Ӣ| | Ԫ| | |