Access to report file denied

Trong khi viết web có sử dụng ứng dụng thì sau khi xuất file thường có lỗi này

Access denied. Error in File C:\WINDOWS\TEMP\bclstheolo {3F8FE46A-BBC5-4748-AA56-38C8EBF4A44C}.rpt: Access to report file denied. Another program may be using it.

đây là lỗi có lẽ là website không có quyền nhòm ngó trong thư mục C:\WINDOWS\TEMP , mình đã khắc phục bằng cách trong IIS6 phân quyền cho tài khoảng IIS_WPG quyền đọc, ghi xóa sửa, nó chung là full thế là nó chạy được

How to Interpret an Enter KeyPress as a Tab in C#

I believe there are two methods to accomplish this, would just involve adding:

Option 1: Grabbing the Next Control if an Enter KeyPress was performed

In the properties of your form, set the KeyPreview property of the form to true.

The code below will capture your "Enter-Press" event and perform the logic that you are looking for:

private void [YourFormName]_KeyDown(object sender, KeyEventArgs e)
{
   
Control nextControl ;
   
//Checks if the Enter Key was Pressed
   
if (e.KeyCode == Keys.Enter)
   
{
       
//If so, it gets the next control and applies the focus to it
        nextControl
= GetNextControl(ActiveControl, !e.Shift);
       
if (nextControl == null)
       
{
            nextControl
= GetNextControl(null, true);
       
}
        nextControl
.Focus();
       
//Finally - it suppresses the Enter Key
        e
.SuppressKeyPress = true;
   
}
}

This actually allows for the user to press "Shift+Enter" to go to the proceeding tab as well.

Option 2: Using the SendKeys method

private void [YourFormName]_KeyDown(object sender, KeyEventArgs e)
{
 
if (e.KeyCode == Keys.Enter)
 
{
     
SendKeys.Send("{TAB}");
 
}
}

I am not sure if this method is still commonly used or may be considered a "hack"? I would recommend the first one, but I believe both should work for your needs.

Đồng bộ hóa giữa SQL Server và SQLCE 3.5 (Client)

Đồng bộ giữa Server và Client là vấn đề được bàn đến từ lâu, nhất là lập trình phần mềm chạy dữ liệu trên Internet. Nhưng khi chạy trực tiếp dữ liệu trên Internet sẽ có nhưng yếu điểm sau:

1.  Tốc độ thực hiện chậm do hạn chế của băng thông Internet

2. Không phải lúc nào đường kết nối Internet cũng ổn định

3. Sai sót trong xử lý. Khi thực hiện gián tiếp trên File Local bạn sẽ định được 1 khoảng thời gian trước khi đồng bộ với Server

Hiện tại Microsoft đưa ra 1 giải pháp đó là Sync Framework. Phần mềm giúp đồng bộ giữa những CSDL khác nhau. và đây là cách thức đồng bộ hóa:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Data.SqlClient;
using Microsoft.Synchronization.Data;
using Microsoft.Synchronization.Data.SqlServer;
using System.Data;
using System.Data.SqlServerCe;
using Microsoft.Synchronization.Data.SqlServerCe;
using Microsoft.Synchronization;
using System.IO;

namespace Sync
{
    class Program
    {
        static void Main(string[] args)
        {
            var file = "C:\\e.sdf";
            var constrclient = String.Format(@"Data Source = {0}", file);

            var constrserver = "Data Source=localhost/SQLEXPRESS;Initial Catalog=phanmem1;Persist Security Info=True;User ID=sa;Password=123456";
            //Kết nối tại Server(MSSQL 2008)
            SqlConnection serverConn = new SqlConnection(constrserver);
            //Kết nối tại Client (SQLCE3.5)
            SqlCeConnection clientConn = new SqlCeConnection(constrclient);
            //Server Sync Scope
            var scopeServer = new DbSyncScopeDescription("scope");
            var serverProvision = new SqlSyncScopeProvisioning(serverConn);
            //Nếu chưa có thì tạo
            if (!serverProvision.ScopeExists("scope"))
            {
                //Duyệt tất cả Table để tạo
                foreach (DataRow item in GetDatabaseTables_SQL(constrserver).Rows)
                {
                    var name = item["Name"].ToString();
                    if (!name.EndsWith("_tracking")
                        && name != "scope_info" && name != "scope_config" && name != "schema_info")
                    {
                        DbSyncTableDescription tableDesc = SqlSyncDescriptionBuilder.GetDescriptionForTable(name, serverConn);
                        scopeServer.Tables.Add(tableDesc);
                    }
                }
                serverProvision.SetCreateTableDefault(DbSyncCreationOption.Skip);

                serverProvision.Apply();
            }

            //Client Sync Scope
            //Nếu chưa có File thì tạo
            if (!File.Exists(file))
            {
                using (SqlCeEngine sqlCeEngine = new SqlCeEngine(constrclient))
                {
                    sqlCeEngine.CreateDatabase();
                }
                //Lấy Server Sync Scope
                scopeServer = SqlSyncDescriptionBuilder.GetDescriptionForScope("scope", serverConn);

                SqlCeSyncScopeProvisioning clientProvision = new SqlCeSyncScopeProvisioning(clientConn, scopeServer);
                clientProvision.Apply();
            }

            //Thực hiện đồng bộ hóa
            SyncOrchestrator syncOrchestrator = new SyncOrchestrator()
            {
                Direction = SyncDirectionOrder.UploadAndDownload,
                LocalProvider = new SqlCeSyncProvider("scope", clientConn),
                RemoteProvider = new SqlSyncProvider("scope", serverConn),
            };
            //Theo dõi tiến trình xảy ra
            ((SqlCeSyncProvider)syncOrchestrator.LocalProvider).SyncProgress += (s, e) =>
            {
                Console.WriteLine("Thực hiện trên bảng: " + e.TableProgress.TableName);
            };
           var sync = syncOrchestrator.Synchronize();
        }
        private static DataTable GetDatabaseTables_SQL(string strConn)
        {
            DataTable tables = new DataTable("Tables");
            using (SqlConnection connection =
                   new SqlConnection(strConn))
            {
                SqlCommand command = connection.CreateCommand();
                command.CommandText = "select table_name as Name from  INFORMATION_SCHEMA.Tables where TABLE_TYPE = 'BASE TABLE'";
                connection.Open();
                tables.Load(command.ExecuteReader(
                                CommandBehavior.CloseConnection));
            }
            return tables;
        }
    }

}

ASP.NET Razor Pages

1 - Getting Started with WebMatrix and ASP.NET Web Pages
2 - Introduction to ASP.NET Web Programming Using the Razor Syntax
3 - Creating a Consistent Look
4 - Working with Forms
5 - Working with Data
6 - Displaying Data in a Grid
7 - Displaying Data in a Chart
8 - Working with Files
9 - Working with Images
10 - Working with Video
11 - Adding Email to Your Web Site
12 - Adding Search to Your Web Site
13 - Adding Social Networking to Your Website
14 - Analyzing Traffic
15 - Caching to Improve the Performance of Your Website
16 - Adding Security and Membership
17 - Introduction to Debugging
18 - Customizing Site-Wide Behavior
ASP.NET API Quick Reference
ASP.NET Web Pages Visual Basic
Program ASP.NET Web Pages in Visual Studio